gpt4 book ai didi

c# Entity Framework Group By with join

转载 作者:行者123 更新时间:2023-11-30 23:15:53 45 4
gpt4 key购买 nike

我有一个自定义类型,我用两个表中的数据填充。我尝试了以下连接两个表,这通常有效。但是 group by 和 count 导致错误:

public List<sLoadingList> GetOrdersforLoadingByWard(string _mywCode, DateTime _orderDate, int _periodId)
{
var _formattedDate = _orderDate.Date;
List<sLoadingList> query = (from o in CateringEntities.Orders
join i in CateringEntities.OrderItems
on o.OrderId equals i.OrderId
where o.LocationsLookUp.WardCode.Equals(_mywCode) &&
DbFunctions.TruncateTime(o.Date) == _formattedDate && o.Period == _periodId
select new sLoadingList()
{
ItemId = i.ItemId,
ItemName = i.Item.ItemName,
ItemType = i.ItemType,
Quantity = i.Item.ItemName.Count()
}).GroupBy(i => i.ItemId).Select(i => i.FirstOrDefault()).ToList();
return query.ToList();

当前出现错误:

{"DbExpressionBinding requires an input expression with a collection 
ResultType.\r\nParameter name: input"}

但是如果我删除:

Quantity = i.Item.ItemName.Count()

查询运行正常。

最佳答案

本质上,您尝试对尚未分组的一组数据使用聚合(Count())。

首先尝试按 ItemId、ItemName 和 ItemType 分组,然后选择其中包含 Count() 的部分。

正如我评论的那样,在没有看到所有表格等的情况下很难给出准确的答案,但请尝试这样的事情 -

List<sLoadingList> query = 
(
(
from o in first
join i in second
on o.OrderId equals i.OrderId
where ... some condition ...
select new sLoadingList()
{
ItemId = i.ItemId
, ItemName = i.Item.ItemName
, ItemType = i.ItemType
}
)
.GroupBy(i => i.ItemId)
.ThenBy(i => i.ItemName)
.ThenBy(i => i.ItemType)
.Select(i => new {KeyData = i.Key, Cnt = i.Item.ItemName.Count()})
)
.GroupBy(i => i.KeyData.ItemId)
.Select(i => i.FirstOrDefault())
.ToList();

本质上,您创建一个查询来提取您想要汇总的数据,然后对其进行分组,然后您可以应用诸如计数之类的聚合。

一些提示-

  • 请记住,您不必在一个查询中执行此操作,请尝试拆分更容易理解的较小的查询
  • 尝试使用 LinqPad,因为它非常适合测试此类内容(www.linqpad.net)

关于c# Entity Framework Group By with join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42302845/

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