我正在嘗試使用SelectMany()方法展平串列,問題是子/嵌套串列可以有資料,或者有時它可以是空的。我希望 lambda 查詢至少回傳父串列的資料,即 InventoryCode 和 InventoryDe??scription,因為父集合永遠不能為空。我嘗試了以下查詢,但是當任何子/嵌套串列為空時,結果計數為 0。
public class Share
{
public string shareCode {get;set;}
public int shareNumber {get;set;}
}
public class ProductModel
{
public string productCode {get;set;}
public string productName{get;set;}
public List<Share> share{get;set;}
}
public class InventoryModel
{
public string inventoryCode {get;set;}
public string inventoryDescription {get;set;}
public List<Product> products {get;set;}
}
Note-InventoryModel 也用作其他模型中的串列
當子串列不為空時,我撰寫的以下代碼運行良好,但是當任何子串列為空時,它無法回傳任何資料
var invenFlatList = lstInventory.SelectMany(x => x.products.SelectMany(y => y.shares.Select(z => new NewModel
{
inventoryCode = x.inventoryCode ,
inventoryDescription = x.inventoryDescription ,
productCode = y.productCode ,
productName= y.productName,
shareCode = z.shareCode ,
shareNumber = z.shareNumber
}))).ToList();
uj5u.com熱心網友回復:
您可以使用以下方法DefaultIfEmpty與后備專案一起使用:
List<NewModel> resultList = lstInventory
.SelectMany(inv => inv.products
.SelectMany(prod => prod.shares
.Select(share => new NewModel
{
inventoryCode = inv.inventoryCode,
inventoryDescription = inv.inventoryDescription,
productCode = prod.productCode,
productName = prod.productName,
shareCode = share.shareCode,
shareNumber = share.shareNumber
})
.DefaultIfEmpty(new NewModel
{
inventoryCode = inv.inventoryCode,
inventoryDescription = inv.inventoryDescription,
productCode = prod.productCode,
productName = prod.productName,
shareCode = null,
shareNumber = 0
})))
.ToList();
uj5u.com熱心網友回復:
用于DefaultIfEmpty()在 linq 中執行左外連接。因此,無論孩子是否可用,都將其添加到您想要回傳父母的地方。請添加null checks后續預測以避免空參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515629.html
標籤:C#实体框架林克拉姆达
上一篇:AsNoTracking拋出錯誤方法'System.Data.Entity.Infrastructure.DbQuery在型別為DbSet上宣告,其中包含集合
