Динамический оператор Where по реляционным таблицам с LINQ к SQL

Console.Read() читает символ из консоли и возвращает его код ASCII. Вы можете прочитать об этом здесь .

Поэтому, если вы введете 50, он будет читать первый символ: «5», а его значение ASCII равно 53.

То есть 100 - 53 = 47.

6
задан Glorfindel 9 March 2019 в 10:15
поделиться

4 ответа

Вы ищете что-то вроде этого, где Вы определяете "основной" запрос и затем оцениваете параметры, чтобы определить, если, где пункт является соответствующим?

var result = (from x in context.X
              select x);

if(some condition)
{
    result = result.AsQueryable().Where(x => x.companyName == name);
}
if(some other condition)
{
    result = result.AsQueryable().Where(x => x.companyTitle == title);
}

//return result.ToList();
//return result.FirstOrDefault();
//return result.Count(); //etc

Я заметил в одном из Ваших комментариев, Вы упомянули, что к Вашим таблицам не присоединяется внешний ключ? Я не уверен, как Вы получаете связь "один ко многим" без некоторой ссылочной целостности или отношений?

12
ответ дан 8 December 2019 в 12:22
поделиться

Проверьте блог ScottGu на динамическую linq библиотеку. Я думаю, что это поможет.

Вот пример запроса, который поражает и клиентов и заказывает таблицу:

    var query =
    db.Customers.
    Where("City = @0 and Orders.Count >= @1", "London", 10).
    OrderBy("CompanyName").
    Select("new(CompanyName as Name, Phone)");
    

Запрос выше прибыл из образцов C# для Visual Studio. Загрузите и посмотрите в \LinqSamples\DynamicQuery папке, и Вы найдете больше примеров.

5
ответ дан 8 December 2019 в 12:22
поделиться

Зависит от того, как динамичный Вы хотите, чтобы это было - поскольку другие уже предложили Систему. Linq. Динамическое пространство имен добавляет некоторую аккуратную функциональность для создания запросов, где объекты/участники включенные (таблицы/столбцы) не известны во время проектирования. В этом случае это походит на объекты, и вовлеченные участники уже известны, и просто необходимо чередоваться между различными полями как Вы где критерии пункта. Вот пример этого:

from cust in dc.Customer
join ord in dc.Order on cust.CustomerID equals ord.CustomerID
where (companyName == null || cust.CompanyName == companyName)
  and (companyTitle == null || cust.CompanyTitle == companyTitle)
  and (orderDate == null || ord.OrderDate == orderDate)
  and (shipCity == null || ord.ShipCity == shipCity)
select new {cust, ord}
2
ответ дан 8 December 2019 в 12:22
поделиться

RobS предоставил то, что я считаю наиболее привлекательным решением. Однако это метод, который я использовал, но потом понял, что он фактически выполняет первый запрос полностью (Linq-To-SQL), а затем последующие предложения .Where () выполняются только с LINQ. Так что это не жизнеспособное решение, поскольку весь набор данных перечисляется, а затем фильтруется в памяти.

Пожалуйста, поправьте меня, если я ошибаюсь - но это то, что я заметил.

0
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: