Наличие нескольких идентификаторов в запросе соединения linq-sql в c#

#c# #sql #linq #linq-to-sql

#c# #sql #linq #linq-to-sql

Вопрос:

У меня есть linq-to-sql запрос, который извлекает записи.

Прежде всего, у меня есть переменная, которая может содержать идентификатор или несколько идентификаторов.

 var consumerId = _context.Consumers.Where(x => x.UsrDefault.Equals("True"));
// This can return one or an array of Ids. 
  

Затем у меня есть запрос linq-to-sql следующим образом:

 var query = (from users in _context.Users 
            join consumers in _context.Consumers 
            on usersId equals consumerId 
            select new UserConsumerDto 
            {
             FirstName = users.FirstName, 
             LastName = users.LastName
            }).ToList()
  

Мой вопрос заключается в том, что, когда у меня их несколько consumerId , как я могу выполнить этот linq-to-sql запрос? Я хочу избежать любого цикла foreach.

Может кто-нибудь посоветовать, пожалуйста?

Комментарии:

1. Если это массив идентификаторов, то равенство никогда не будет работать правильно. Скорее вам придется сделать это IN предложением ( Contains() )

Ответ №1:

Contains какой метод следует использовать здесь или Any() .

Смотрите фрагмент кода ниже:

 var query = (from users in _context.Users 
            join consumers in _context.Consumers 
            on users.usersId equals consumers.consumerId 
            where consumerId.Contains(consumers.consumerId)
            select new UserConsumerDto 
            {
             FirstName = users.FirstName, 
             LastName = users.LastName
            }).ToList()
  

для любого :

 where consumerId.Any(id => id == consumers.consumerId)
  

Комментарии:

1. Ассаламуалькум Эхсан. Спасибо вам за ваш ответ. Другим способом сделать это может быть: join consumers on consumers.Id IN (consumerId) Вы советуете это?

2. Валайкум Салам, я не уверен, будет ли это переведено на правильный sql, можно попробовать, если это сработает

3. Спасибо тебе за твою помощь, брат 🙂