У меня есть такой запрос
(from u in DataContext.Users
where u.Division == strUserDiv
&& u.Age > 18
&& u.Height > strHeightinFeet
select new DTO_UserMaster
{
Prop1 = u.Name,
}).ToList();
Я хочу добавить различные условия, такие как возраст, рост, в зависимости от того, были ли эти условия предоставлены методу, выполняющему этот запрос. Все условия будут включать Пользовательский Дивизион. Если был указан возраст, я хочу добавить это в запрос. Точно так же, если была указана высота, я хочу добавить и ее.
Если бы это было сделано с помощью sql-запросов, я бы использовал построитель строк, чтобы добавить их к основному запросу strSQL. Но здесь, в Linq, я могу думать только об использовании условия IF, при котором я напишу один и тот же запрос трижды, причем каждый блок IF будет иметь дополнительное условие. Есть лучший способ сделать это?
источник
LINQ to Entities does not recognize the method 'System.String get_Item(System.String)' method, and this method cannot be translated into a store expression.
Я обычно использую цепочку методов, но у меня та же проблема. А вот расширение, которое я использую
Это помогает избежать разрывов цепи. То же самое
ConditionalOrderBy
иConditionalOrderByDescending
полезно.источник
один вариант.
или вы можете переключиться на синтаксис метода для linq и использовать условия if для присоединения выражений к предложению where.
источник
Просто я использую его в своем предложении where как
источник
На основе определенного условия добавьте условие where ...
источник
Вот мой код, чтобы сделать то же самое. Это метод в моем API веб-службы WCF SOAP.
Базовый запрос
Select(f => f)
означает в основном ВСЕ, и к немуWhere
необязательно могут быть прикреплены предложения. Финал неSelect
является обязательным. Я использую для преобразования объектов строк базы данных в объекты результата "Fruit".источник
Предполагая следующий параметр,
Просто используя
&&
и||
условные операторы мы можем иметь другую версию.Как и Param1, вы можете добавить любое количество параметров для условия поиска.
источник
Я просто наткнулся на это в поисках чего-то еще, но подумал, что добавлю лямбда-версию.
Во-первых, я бы создал такой класс, чтобы передавать параметры на уровень данных:
Затем на моем уровне данных что-то вроде этого:
Где вы материализуете вопрос, зависит от вас. Может быть слой между приложением и данными, который преобразует представления, специфичные для db, в db-agnostic (возможно, вы запрашиваете несколько источников данных). Этот слой может получать несколько типов запросов из этих источников и отображать их, например, в общее представление POCO.
источник
Просто чтобы добавить к принятому выше ответу здесь , если вы выполняете динамический поиск по объединению, подумайте о том, чтобы вернуть новый объект с обеими таблицами (t1, t2) в исходном запросе linq, чтобы вы могли получить к ним доступ индивидуально для выполнения условного поиск.
Я получил ответ, который искал здесь, относительно объединения двух таблиц и запроса определенных столбцов в любой из таблиц.
источник