Как преобразовать команду SQL в Entity Framework и лямбда-выражения - PullRequest
1 голос
/ 03 октября 2019

Я хочу преобразовать некоторый код SQL в структуру сущностей

select *
into #invoice
from Invoice
where Track = 2

select Fuel.ID, SUM(ISNULL(#invoice.Price, 0)) as Price, SUM(ISNULL(#invoice.Price, 0))
from Fuel left outer join #invoice
on Fuel.ID = #invoice.Fuel
group by Fuel.ID

Попробуйте написать этот код, но результат будет нулевым (0) ( Цена и литр )

var data = fules.GroupJoin(model,
          f => f.ID,
          m => m.ID,
           (f, m) => new { f, m })
         .SelectMany(x => x.m.DefaultIfEmpty(),
         (x, m) => new { Fuel = x.f, Price = m?.Price, Liter = m?.Liter })
          .GroupBy(A => A.Fuel)
          .Select(A => new { Fuel = A.Key.Name, Liter = A.Sum(B => B.Liter)
, Price = A.Sum(B => B.Price) })
              .ToList();

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Я думаю, вы ищете что-то вроде этого:

var query = from f in db.Feuls
            from i in f.Invoices.Where(x => x.Track == 2).DefaultIfEmpty()
            group i by f.ID into g
            select new
            {
               ID = g.Key,
               Liter = g.Sum(x => g.Liter),
               Price = g.Sum(x => g.Price)
            };
0 голосов
/ 03 октября 2019

Вы не переводите SQL в функции LINQ / Lambda. Вместо этого начните с результата «зерно» и следуйте свойствам навигации, чтобы заполнить проецируемые столбцы.

Что-то вроде:

db.Feuls.Select( f => new 
   {
      Fuel = f.Name, 
      Liter = f.Invoices.Where( i => i.Track = 2 ).Sum( i => i.Liter ),
      Price = f.Invoices.Where( i => i.Track = 2 ).Sum( i => i.Price )
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...