我有一个自定义类型,我用两个表中的数据填充。我尝试了以下方法来连接两个表,这通常有效。但分组依据和计数导致错误:
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)
关于时间:2019-03-17 标签:c#EntityFrameworkGroupBywithjoin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42302845/