gpt4 book ai didi

c# - 连接来自 IQueryable 和 IList 的数据

转载 作者:行者123 更新时间:2023-11-30 22:00:14 25 4
gpt4 key购买 nike

我正在尝试将一行父数据连接到一个相关的集合中,该集合已被压缩成一个数据。

我有一个 IQueryable订单数量:

IQueryable<Order> orderList = context.Set<Order>
.Where("OrderDate >= @0", startDate)
.Where("OrderDate <= @0", endDate)

和相关的IList<KeyValuePair<int, string>>其中每个 KVP 都包含 OrderID 和来自每个订单行的产品名称的串联字符串。我想根据 OrderID 键将正确的 KeyValuePair 中的值加入到订单信息中。

为了说明,所需的输出看起来像这样:

OrderNum  OrderDate   Customer    State       OrderTotal   Products_Ordered
12345 12/12/2012 J.Bloggs WA $25.50 Bolts, Hammer, Suregrip Clamp

我正在尝试如下所示的 linq 连接:

IQueryable result = from o in orders
join line in orderLines on o.OrderID equals line.Key
select new
{
o.OrderNum
o.OrderDate,
o.Customer.CustomerFullName,
o.DeliverAddress.State,
o.TotalPrice,
line.Value
}

执行连接的方法似乎有效,但是当我访问返回的 IQueryable 时, 我得到一个 NotSupportedException : 无法创建“System.Collections.Generic.KeyValuePair`2”类型的常量值。在此上下文中仅支持基本类型或枚举类型。

我做错了什么?

最佳答案

您的 IQueryable 实际上是一个专门的 Entity Framework 实现,当迭代时,它会尝试通过检查表达式树来构造 SQL 查询,执行此查询,并返回一个可枚举的结果。这是脆弱的,您的预测和查询不能任意复杂,否则表达式 -> SQL 转换器不知道如何处理它。

首先通过具体化您的 IQueryable 来解决这个问题很好,但您甚至不需要这样做。当你想要的是一个将订单 ID 映射到一堆数据的字典时,为什么要有一个本质上是元组的列表?

IDictionary<int, string> orderLines = new Dictionary<int, string>();

// Add a dummy item
orderLines[1234] = "Hello, this, is, a, test";

// Get your combined view
// Assuming you have an order with 1234 as the ID, this should work
var result = from o in orders
select new
{
o.OrderNum
o.OrderDate,
o.Customer.CustomerFullName,
o.DeliverAddress.State,
o.TotalPrice,
Products = orderLines[o.OrderID]
}

关于c# - 连接来自 IQueryable 和 IList<KeyValuePair> 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711056/

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