2014-02-17 2 views
1

Я хочу найти несколько результатов и получить результаты. Я посылаю эту функцию devicenameuseralarm. Когда эти переменные заполняются, он работает. но когда они пусты, это не так. Я могу заполнить только переменную devicename. Например;Множественный поиск Entity Framework с пустыми переменными?

devicename = "test"; 
alarm=""; 
user=""; 

Иногда я могу заполнить devicenameuser, иногда я могу заполнить devicenamealarm .. Я не могу получить какие-либо данные из моего кода. Мне нужна помощь. вот мой код:

List<ActivityLog> list = db.ActivityLog.Where(c => c.Devices.devName.ToLower().Contains(devicename.ToLower())) 
             .Where(c => c.Users.uName.ToLower().Contains(user.ToLower())) 
             .Where(c => c.AlarmCodes.aName.ToLower().Contains(alarm.ToLower())) 
             .OrderBy(c => c.dateTime).Skip(skip).Take(pageSize).ToList(); 

ответ

3
 List<ActivityLog> list = db.ActivityLog.Where(c => devicename == "" || c.Devices.devName.ToLower().Contains(devicename.ToLower())) 
               .Where(c => user == "" || c.Users.uName.ToLower().Contains(user.ToLower())) 
               .Where(c => alarm == "" || c.AlarmCodes.aName.ToLower().Contains(alarm.ToLower())) 
               .OrderBy(c => c.dateTime).Skip(skip).Take(pageSize).ToList(); 

и, как предложил Михай, можно комбинировать все утверждения.

+0

это дает ошибку: ** этот метод не может быть переведен в выражение хранилища. ** –

+0

Извините, обновил ответ. – nima

+0

ОК, я понял. Благодарю. оно работает... –

2

можете ли вы поместить все те, где в сигле с условием ИЛИ между ними? Подобно этому, он действует как операция И.

.ActivityLog.Where(c => c.Devices.devName.ToLower().Contains(devicename.ToLower()) || 
         c.Users.uName.ToLower().Contains(user.ToLower()) || 
         c.AlarmCodes.aName.ToLower().Contains(alarm.ToLower())) 
      .OrderBy(c => c.dateTime).Skip(skip).Take(pageSize).ToList(); 
+0

О, я понимаю. Благодарю. Я всегда делаю && операцию. –

+0

рад, что это помогло. – Mihai

+0

oh Я вижу, что когда я заполняю 2 переменную, и я не заполняю одну переменную, она дает все данные. –

3

Я сделал это в прошлом.

public IQueryable<ActivityLog> ApplyCriteria(Context db) 
{ 
    var activitySet = db.ActivityLog.AsQueryable(); 

    if(!string.IsNullOrWhiteSpace(deviceName)) 
     activitySet.Where(c => c.Devices.devName.ToLower().Contains(devicename.ToLower()); 

    //and so on and so forth 
    return activitySet; 
} 

public Response SearchStuff(Criteria criteria) 
{ 
    using(var db = CreateContext()) 
    { 
     var qry = criteria.ApplyApplyCriteria(db); 
     //In this instance, whatever is a list on my response object, but I believe it could be 
     //anything that handles IEnumerable 
     response.Whatever.AddRange(qry); 
    } 
} 

И только что построил мой запрос таким образом. Тогда в вызывающем критерии я могу обработать Queryable, но я хочу.

+0

Я пробовал это, но я не могу добавить в свой список –

+0

Я не понимаю, что вы имеете в виду, но я немного подробнее расскажу о том, что я делаю, применяя критерии. Позвольте мне отредактировать мой ответ правильно быстро :) –

Смежные вопросы