【问题标题】:Linq: using let statement based on string to group dataLinq:使用基于字符串的let语句对数据进行分组
【发布时间】:2020-06-02 05:19:58
【问题描述】:

这是我的场景...

假设我有这个类(称为 nf)w/values:

MyDate,Tons,ClientCode
25/12/2020,10,A
26/12/2020,5,A
27/12/2020,5,A
14/12/2020,7,A
11/12/2020,3,A

所以我编写了以下代码来对结果进行分组。

   List<HC> nfs = (from n in ctx.nf
                   where n.ClientCode.StartsWith(CLIENT_CODE_STR)
                   let quinzena = $"{n.MyDate.Year}/{n.MyDate.Month}/{(n.DataEmissao.Day >= 1 && n.MyDate.Day <= 15 ? "1QZ" : "2QZ")}"
                   group n by new { quinzena } into g
                   select new { qnz = g.Key.quinzena, totalc = g.Sum(x => x.Tons) }
                  ).Take(12)
                  .OrderByDescending(a => a.qnz)
                  .AsEnumerable()
                  .Select(r=> new HC{ Period = r.qnz, TotalTons = r.totalc }).ToList();

预期结果是:

Period,TotalTons
2020/12/1QZ,10
2020/12/2QZ,20

重点是 let 语句...用于正确分组数据... 当代码运行我得到这个错误......

LINQ to Entities 无法识别方法 'System.String 格式(System.String,System.Object,System.Object,System.Object)' 方法,并且该方法不能翻译成商店表达式。

有没有办法进行这种分组? 非常感谢

【问题讨论】:

  • 您的 $"{n.MyDate.Year}/{n.MyDate.Month}/{(n.DataEmissao.Day &gt;= 1 &amp;&amp; n.MyDate.Day &lt;= 15 ? "1QZ" : "2QZ")}" 内插字符串将被替换为 string.Format()your IQueryable 处理程序不支持 string.format,该处理程序创建 request/sql 语句。您是否尝试以旧方式连接它?
  • 是的...我试过...没有成功

标签: c# linq entity-framework-6 aggregate


【解决方案1】:

为什么不将这些值分开,直到您需要将它们组合到内存中。

List<HC> nfs = (from n in ctx.nf
               where n.ClientCode.StartsWith(CLIENT_CODE_STR)
               let q = n.DataEmissao.Day >= 1 && n.MyDate.Day <= 15 ? "1QZ" : "2QZ"
               group n by new { n.MayDate.Year, n.MayDate.Month, Q = q } into g
               select new { qnz = g.Key, totalc = g.Sum(x => x.Tons) }
              ).Take(12)
              .OrderByDescending(a => a.qnz.Year)
              .ThenByDescending(a => a.qnz.Month)
              .ThenByDescending(a => a.qnz.Q)
              .AsEnumerable()
              .Select(r=> new HC
              { 
                  Period = $"{r.qnzYear}/{r.qnz.Month}/{r.qnz.Q}", 
                  TotalTons = r.totalc 
              })
              .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多