Преобразование SQL в Linq с использованием где в содержит - PullRequest
0 голосов
/ 20 сентября 2019

Я написал этот оператор SQL:

select id,ProductAbbr 
from Product  
where id in (Select max(id) from Product group by ProductAbbr)

Мой запрос linq:

 var prod = (from t in _context.Product
             group t by t.ProductAbbr
             into g
             select new
                    {
                        Id = (from t2 in g select t2.Id).Max()
                    }).ToList();

// int idlist = Int32.Parse(prod);
var request = (from p in _context.Product
               where(p => prod.Contains(p.Id))
               select new
                      {
                          p.Id, p.ProductAbbr
                      }).ToList().Distinct();

Я получаю эту ошибку

CS0136 C # Локальныйили параметр с именем 'p' не может быть объявлен в этой области, поскольку это имя используется во внешней локальной области для определения локального параметра или параметра

1 Ответ

0 голосов
/ 20 сентября 2019

Разве это не просто

var prod = (from t in _context.Product
            group t by t.ProductAbbr
                       into g
            select new
            {
                Id = (from t2 in g select t2.Id).Max()
            }).ToList();
//int idlist = Int32.Parse(prod);
var request = (from p in _context.Product
               join p1 in prod on p1.Id equals p.Id
               select new
               {
                   p.Id,
                   p.ProductAbbr
               }).ToList().Distinct();

?

Обратите внимание, что я изменил

где (p => prod.Contains (p.Id))

To

присоединить p1 в prod на p1.Id равно p.Id

Обратите внимание, что это сделает ваш запрос синтаксическидопустимо, но, кажется, также возможно переработать его многими другими способами в соответствии с тем, что я вижу.Второй запрос, кажется, не приносит ничего полезного, по крайней мере, в вашем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...