Как я могу отделить условие в запросе LINQ to SQL?

#c# #asp.net #sql #database #linq-to-sql

#c# #asp.net #sql #База данных #linq-to-sql

Вопрос:

Я использую ASP.NET с помощью C # и мне нужно сделать условие запроса динамическим, пример:
База данных:

  Name       Sex
 --------------
 John Doe    M
 Jane Doe    F
  

Теперь я хочу разрешить поиск в наборе данных, но если пользователь выберет поиск только по имени ИЛИ полу, запрос разрешит поиск по столбцам name или sex. Однако, если пользователь выберет поиск как по имени, так и по полу, запрос разрешит поиск по имени и по столбцу пола. Мой вопрос в том, могу ли я разделить запрос с помощью операторов if для учета динамического характера поиска? Спасибо.

Ответ №1:

Вы можете сделать:

 var q = ...;

if(sex != null) {
    q = q.Where(r => r.Sex == sex);
}
if(name != null) {
    q = q.Where(r => r.Name == name);
}
  

Это будет фильтроваться по полу и / или имени в зависимости от того, что передается.

 q = q.Where(r => r.Sex == sex).Where(r => r.Name == name);
  

это то же самое, что

 q = q.Where(r => r.Sex == sex amp;amp; r.Name == name);
  

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

1. Спасибо за быстрый ответ, я новичок в linq-to-sql, поэтому у меня возникли трудности с этим, еще раз спасибо, очень признателен

Ответ №2:

Стивен прав, это один хороший и простой способ сделать это, и он отлично подойдет для ваших нужд. Если вы когда-нибудь попадете в ситуацию, когда у вас может быть несколько условных операторов, было бы разумно изучить динамический linq. Динамический linq позволит вам написать запрос, такой как:

     DatabaseDataContext db = new DatabaseDataContext();

    string WhereClause = string.Empty;

    if (!string.IsNullOrEmpty(Name))
        WhereClause  = "Name.ToLower().Contains(""   Name.ToLower()   "") AND ";

    if (!string.IsNullOrEmpty(State))
        WhereClause  = "City.State.Name.ToLower().Contains(""   State.ToLower()   "") AND ";

    if (!string.IsNullOrEmpty(County))
        WhereClause  = "City.County.Name.ToLower().Contains(""   County.ToLower()   "") AND ";

    if (!string.IsNullOrEmpty(City))
        WhereClause  = "City.Name.ToLower().Contains(""   City.ToLower()   "") AND ";


    if (WhereClause.EndsWith(" AND "))
        WhereClause = WhereClause.Remove(WhereClause.Length - 5);

    var query = db.Communities
                .Where(WhereClause)
                .OrderBy("Name");
  

Вы можете получить динамический класс linq здесь http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

Удачи!