我有一个自定义类型,我填充两个表中的数据。我尝试了以下两个表,这通常有效。但是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()
查询运行正常。
答案 0 :(得分:2)
基本上,您尝试在尚未分组的一组数据上使用聚合(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();
基本上,您创建一个查询来提取您要汇总的数据,然后对其进行分组,然后您可以应用聚合,例如count。
一些提示 -