错误代码:
var orders = db.Orders.Where(o => o.UserId == userid).Select(c =>
new Order
{
OrderId = c.OrderId,
OrderDate = c.OrderDate,
Total = c.Total,
OrderDetails = db.OrderDetails.Where(od => od.OrderId == c.OrderId).ToList()
}
).ToList();
正确写法:
var orders = db.Orders.Where(o => o.UserId == userid).ToList().Select
(c =>
new Order
{
OrderId = c.OrderId,
OrderDate = c.OrderDate,
Total = c.Total,
OrderDetails = db.OrderDetails.Where(od => od.OrderId == c.OrderId).ToList()
}
).ToList();
原理: linq 选择数据时候 不能new 已知的对象,只能匿名的。 但是如果从一个 List 列表 就可以new 已知的类。
实例
public List<CMS_MudidiTag_Area> GetAreaTagDataByMonth(int tagMonth, int tagType, int tagId = 0)
{
List<CMS_MudidiTag_Area> listTag = new List<CMS_MudidiTag_Area>();
using (var context = new CMSContext())
{
listTag = context.CMS_MudidiTag_Area
.Where(t => t.TagMonth == tagMonth && t.Status == 0 && t.TagType == tagType && (tagId == 0 || t.TagId == tagId))
.Join(context.CMS_MudidiTag_Info, a => a.TagId, i => i.TagId, (a, i) => new { Id = a.Id, TagName = a.TagName, TagAlias = i.InfoName }).ToList()
.Select(r => new CMS_MudidiTag_Area { Id = r.Id, TagName = r.TagName, TagAlias = r.TagAlias }).ToList();
}
return listTag;
}