我有一个包含List<>
的视图模型。此列表是另一个模型的集合,我正在尝试填充此列表,同时填充IEnumerable
我的视图模型。在执行此操作时,我收到错误“LINQ to Entities中仅支持无参数构造函数和初始值设定项”。错误来自于Locations = new List<>
部分我尝试填充列表。我想知道的是如何以正确的方式填写此列表。
代码:
IEnumerable<PickListLineViewModel> lineList = dbEntity.PickListLine
.Where(i => i.PickID == id && i.Status != "C")
.Select(listline => new PickListLineViewModel
{
ArticleName = dbEntity.Item
.Where(i => i.ItemId == dbEntity.SalesOrderLine
.Where(idb => idb.DocId == listline.BaseDocID &&
idb.DocType.Equals(listline.BaseDocType) &&
idb.LineNum == listline.BaseLineNum)
.Select(iid => iid.ItemId)
.FirstOrDefault())
.Select(p => p.Description)
.FirstOrDefault(),
PickID = listline.PickID,
BaseDocID = listline.BaseDocID,
BaseDocType = listline.BaseDocType,
BaseLineNum = listline.BaseLineNum,
LineNum = listline.LineNum,
Quantity = listline.Quantity,
ReleasedByQty = listline.ReleasedByQty,
Status = listline.Status,
PickedQuantity = listline.PickedQuantity,
Locations = new List<BinLocationItemModel>(dbEntity.BinLocation_Item
.Where(t => t.ItemId == dbEntity.SalesOrderLine
.Where(idb => idb.DocId == listline.BaseDocID &&
idb.DocType.Equals(listline.BaseDocType) &&
idb.LineNum == listline.BaseLineNum)
.Select(iid => iid.ItemId)
.FirstOrDefault())
.Select(locitem => new BinLocationItemModel
{
ItemId = locitem.ItemId,
Barcode = locitem.BinLocation.Barcode,
BinLocationCode = locitem.BinLocation.BinLocationCode,
BinLocationId = locitem.BinLocationId,
BinLocationItemId = locitem.ItemId,
StockAvailable = locitem.StockAvailable
}))
.ToList(),
ArticleID = dbEntity.Item
.Where(i => i.ItemId == dbEntity.SalesOrderLine
.Where(idb => idb.DocId == listline.BaseDocID &&
idb.DocType.Equals(listline.BaseDocType) &&
idb.LineNum == listline.BaseLineNum)
.Select(iid => iid.ItemId)
.FirstOrDefault())
.Select(p => p.ItemCode)
.FirstOrDefault()
})
.AsEnumerable();
BinLocationItemModel:
public class BinLocationItemModel
{
[Required]
public int BinLocationItemId { get; set; }
public string Barcode { get; set; }
public string BinLocationCode { get; set; }
[Required]
public int BinLocationId { get; set; }
[Required]
public int ItemId { get; set; }
public decimal? StockAvailable { get; set; }
}
答案 0 :(得分:0)
在PickListLineViewModel构造函数中,您应该初始化您的位置列表,如下所示
public class PickListLineViewModel
{
public PickListLineViewModel()
{
Locations = new List<BinLocationItemModel>();
}
public List <BinLocationItemModel> Locations { get; set; }
}
public class BinLocationItemModel
{
....
}
然后,对于你的linq查询,你应该能够执行以下操作,你不需要linq中的新列表:
Locations = dbEntity.BinLocation_Item
.Where(t => t.ItemId == dbEntity.SalesOrderLine
.Where(idb => idb.DocId == listline.BaseDocID &&
idb.DocType.Equals(listline.BaseDocType) &&
idb.LineNum == listline.BaseLineNum)
.Select(iid => iid.ItemId)
.FirstOrDefault())
.Select(locitem => new BinLocationItemModel
{
ItemId = locitem.ItemId,
Barcode = locitem.BinLocation.Barcode,
BinLocationCode = locitem.BinLocation.BinLocationCode,
BinLocationId = locitem.BinLocationId,
BinLocationItemId = locitem.ItemId,
StockAvailable = locitem.StockAvailable
})
.ToList(),