时间:2019-03-17 标签:c#EntityFrameworkGroupBywithjoin

标签 c# entity-framework

我有一个自定义类型,我用两个表中的数据填充。我尝试了以下方法来连接两个表,这通常有效。但分组依据和计数导致错误:

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/

相关文章:

c# - Entity Framework 4.0 - 版本控制

c# - 如何将 VSTO C# 代码连接到功能区和/或键盘快捷键

c# - 读取xml文件并将id的值写入C#中的相关文本框中

entity-framework - 异步和 Entity Framework

c# - Crystal 报表和登录问题

c# - 如何填充 GridView 异步

c# - MySQL 的实体上下文生命周期

c# - 字典 TryGetValue NullReferenceException

c# - AWS Lambda C# 上传对象到 S3

c# - 机器人框架 v4.如何清除turnContext.Activity.MembersAdded,以便再次发送欢迎消息