#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. Спасибо тебе за твою помощь, брат 🙂