C# Linq:使用基于字符串的let语句对数据进行分组

C# Linq:使用基于字符串的let语句对数据进行分组,c#,linq,entity-framework-6,aggregate,C#,Linq,Entity Framework 6,Aggregate,这是我的场景 假设我有这个类(称为nf)w/值: 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_ST

这是我的场景

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

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();
重点是let语句。。。用于正确分组数据的。。。 当代码运行时,我得到这个错误

LINQ to实体无法识别方法“System.String” 格式(System.String、System.Object、System.Object、System.Object、System.Object)' 方法,而此方法无法转换为存储表达式

有没有办法执行此分组??
thx很多

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

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();
List nfs=(从ctx.nf中的n开始)
其中n.ClientCode.StartsWith(客户端代码)
设q=n.DataEmissao.Day>=1&&n.MyDate.Day x.Tons)}
).Take(12)
.OrderByDescending(a=>a.qnz.Year)
.然后下降(a=>a.qnz.月)
.然后按降序(a=>a.qnz.Q)
.可计算的()
.选择(r=>新HC
{ 
期间=$“{r.qnzYear}/{r.qnz.Month}/{r.qnz.Q}”,
总吨=r.totalc
})
.ToList();

Your
$“{n.MyDate.Year}/{n.MyDate.Month}/{(n.DataEmissao.Day>=1&&n.MyDate.Day是的……我尝试过……但没有成功
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();