使用Entity Framework Version = 6.0.0.0获取公共ID和orderid,如下所示。
var dt1 = from p in dt.AsEnumerable()
select new
{
Id = p.Field<int>("Id"),
OrderId = p.Field<int>("OrderId")
};
var dt2 = (from order in db.Orders
select new
{
order.Id,
order.OrderId
}).ToList();
var intersect = dt1.Intersect(dt2);
基于相交值的列表。我需要从Orders Table中选择所有值。
尝试使用代码获取错误&#34;无法创建类型匿名类型的常量值仅原始类型&#34;
var result= (from a in sync.Orders
where intersect.Any(b => a.Id == b.Id && a.OrderId == b.OrderId)
select a).ToList();
答案 0 :(得分:12)
你正试图加入&#34;带有内存数据集的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();
另一种选择是将Id
和OrderId
连接成一个值并使用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();