2014-02-17 34 views
1

我想搜索多個並獲得結果。我發送此功能devicenameuseralarm。當這些變量被填充時,它就起作用了。但是當他們空着時,事實並非如此。我只能填寫devicename變量。例如;實體框架使用空變量進行多重搜索?

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(); 

和Mihai建議你可以結合所有的地方陳述。

+0

它給錯誤:**這種方法不能被翻譯成商店的表達式。** –

+0

對不起,更新了答案。 – nima

+0

好的我明白了。謝謝。有用... –

2

你可以把所有那些在一個與OR條件之間的信號?像這樣,它就像AND操作一樣。

.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

哦,我看到,當我填寫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

我不明白你的意思,但是我會詳細闡述我在應用標準時做了些什麼。讓我快速編輯我的答案:) –