Left Join возвращает только те значения, которые совпадают с UserID - PullRequest
0 голосов
/ 08 июня 2019

Левое объединение возвращает дубликаты продуктов, когда 1 или более пользователей сохраняют один и тот же продукт.

Я решил проблему в SQL-запросе. Вот запрос:

select p.ProductID,  
       (case when c.UserID = 3 then 'true' else 'false' end) as flag
    from product as p  
    left join SavedItem as c on product.ProductID = c.ProductID and
      c.UserID = 3

не может понять, как это сделать в платформе Entity.

left join SavedItem as c on product.ProductID = c.ProductID and
 c.UserID = 3 

Левое соединение можно решить так:

join c in SavedItem on p.ProductID equals c.ProductID into lj
    from c in lj.DefaultIfEmpty()

c.UserID = 3 где это разместить?

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Попробуйте это:

var query=  from product in context.Products
            from SavedItem in context.SavedItems.Where(c=> c.ProductID = product.ProductID && c.UserID == 3).DefaultIfEmpty()
            select new {
                        ProductID=product.ProductID,
                        Flag=(SavedItem==null || SavedItem.UserID != 3) ? false : true
            };
0 голосов
/ 08 июня 2019

Здесь!Я нашел решение.

from product in context.Products
      join c in context.SavedItems 
      on new { p1 = (int?)product.ProductID , p2 = (int?)cat.UserID } 
      equals new { p1 = c.ProductID ,p2 = c.UserID} into lj
      from c in lj.DefaultIfEmpty()
                   select new{
                        ...
                       flag = (c.UserID == cat.UserID ? "true" : "false"),
                         ...
                             }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...