gpt4 book ai didi

c# - 无法创建类型为匿名类型的常量值,只有原始类型

转载 作者:太空狗 更新时间:2023-10-29 21:04:35 24 4
gpt4 key购买 nike

使用 Entity Framework Version=6.0.0.0 获取 common 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);

基于 intersect 中的值列表。我需要从订单表中选择所有值。

尝试使用代码时出现错误“无法创建匿名类型的常量值”

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 因为它可以转换为 IN SQL 中的子句:

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();

关于c# - 无法创建类型为匿名类型的常量值,只有原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31054424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com