【发布时间】:2015-02-25 04:21:37
【问题描述】:
我正在尝试将一行父数据加入到已压缩为单个数据的相关集合中。
我有一个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 的常量值'。此上下文仅支持原始类型或枚举类型。
我做错了什么?
【问题讨论】:
-
@MatthewHaugen 是的,标签已更新
-
是的,我一问就注意到你有
context.Set<Order>。谢谢。 -
您的变量
result的类型为IQueryable。是出于某种原因需要这样做,还是您只是想要实际结果,而这恰好是它们的样子? -
你为什么有
IList<KeyValuePair<int, string>>?有字典不是更好吗? -
没有理由,除了父级中的原始数据是一个 IQueryable,并且由于这是对附加信息的请求,我认为最好(也是最简单)使用相同的构造。我认为唯一的要求是它是 IEnumerable。
标签: c# linq entity-framework join