无法创建类型为匿名类型的常量值仅基本类型

使用Entity Framework Version = 6.0.0.0获取公共id和orderid,如下所示。

var dt1 = from p in dt.AsEnumerable() select new { Id = p.Field("Id"), OrderId = p.Field("OrderId") }; var dt2 = (from order in db.Orders select new { order.Id, order.OrderId }).ToList(); var intersect = dt1.Intersect(dt2); 

基于相交值的列表。 我需要从Orders Table中选择所有值。

试图使用代码获取错误“无法创建类型匿名类型的常量值仅原始类型”

 var result= (from a in sync.Orders where intersect.Any(b => a.Id == b.Id && a.OrderId == b.OrderId) select a).ToList(); 

您正在尝试使用内存数据集“加入”EF查询,这不起作用,因为没有办法在SQL中嵌入列表和查找。 一种选择是使用AsEnumerable将整个表拉入内存:

 var result= (from a in sync.Orders.AsEnumberable where intersect.Any(b => a.Id == b.Id && a.OrderId == b.OrderId) select a).ToList(); 

另一种选择是将IdOrderId连接成一个值并使用Contains因为它可以转换为SQL中的IN子句:

 var lookup = intersect.Select(i => i.Id + "-" + i.OrderId).ToList(); var result= (from a in sync.Orders where lookup.Contains(a.Id + "-" + a.OrderId) select a).ToList();