Я пытаюсь сгруппировать по 2 полям, а затем подсчитывать строки каждого статуса. Я использую. NET core 3.1 и новейшую версию EF.
Я получаю сообщение об ошибке: не удалось перевести выражение LINQ. Либо перепишите запрос в форме, которая может быть переведена ...
До сих пор я исследовал, когда я избавляюсь от предиката y.Count (x => x.Status == "New ") и просто оставьте y.Count () , все работает нормально.
Коллекция заказов - это просто фиктивный список объектов, в моем реальном приложении это таблица в sql server.
//Rextester.Program.Main is the entry point for your code. Don't change it.
//Microsoft (R) Visual C# Compiler version 2.9.0.63208 (958f2354)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
var orders = new List<Order>();
orders.Add(new Order(){Year = 2020, Status = "New"});
orders.Add(new Order(){Year = 2020, Status = "New"});
orders.Add(new Order(){Year = 2020, Status = "Canceled"});
orders.Add(new Order(){Year = 2020, Status = "Shipped"});
var result = await orders
.GroupBy(x=> new {x.Year, x.Status})
.Select(y => new
{
Year = y.Key.Year,
NewCount = y.Count(x=>x.Status == "New"),
CanceledCount = y.Count(x=>x.Status == "Canceled"),
ShippedCount = y.Count(x=>x.Status == "Shipped")
}).ToListAsync();
}
}
public class Order
{
public int Year {get;set;}
public string Status {get;set;}
}
}
Ожидаемый результат:
Год: 2020, NewCount: 2
Год: 2020, CanceledCount: 1
Год: 2020, ShippedCount: 1
Что я делаю не так? Как исправить эту ошибку, чтобы получить желаемый результат?
РЕДАКТИРОВАТЬ: Это моя игровая площадка https://dotnetfiddle.net/v7IYmq