在 LINQ to Entities 查询中无法构造实体或复杂类型

错误代码:

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;
        }

 

转载于:https://my.oschina.net/HJCui/blog/684186

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值