2015-04-28 48 views
2

我正在嘗試使用LINQ查詢來查詢我的實體框架。我需要做的是添加到我正在建立的查詢,如果某些元素是真的。如果list isnt爲空,添加相交

我開始了與

IQueryable<Jobs> GetJobs(list<string> staff, list<string> clients 
{ 
var query = dbContext.Jobs.Where(a=> (a.JobName.Contains("New Job")); 

我需要添加查詢,如果列表被填充

if (staff.Count > 0) { 
    query = query.where(a=>staff.Contains(a.staff)); 
} 

if (client.Count > 0) { 
    query = query.where(a => a.Clients.select(b=>b.Name).Intersect(client).Any(); 

工作人員1:1的關係,和客戶是多對多。

的查詢工作,如果我只包括員工或客戶端,但是當我有兩個總是返回0

+0

您的兩個額外條件都與*和*結合在一起。你確定,當你單獨看結果集時,他們至少有一個共同的結果元素? –

+0

是當員工列表和客戶端列表都填充時,只有在兩者都爲真時才返回查詢 – michael

+0

是的......但是您是否在僅查看員工的查詢中看到至少一條記錄,該查詢也出現在僅客戶端查詢中? –

回答

0

如果你想獲得一組作業,即

  • JobName像「新工作」和
  • 有目前Staff特性在給定staff列表,並從給定的clients列表
  • 至少有一個客戶端

那麼,這應該工作。

IQueryable<Jobs> GetJobs(list<string> staff, list<string> clients) 
{ 
    var query = dbContext.Jobs.Where(x => x.JobName.Contains("New Job")); 

    if (staff != null && staff.Count > 0) 
     query = query.Where(x => staff.Contains(x.Staff)); 

    if (clients != null && clients.Count > 0) 
     query = query.Where(x => x.Clients.Any(c => clients.Contains(c.Name))); 

    return query; 
} 
相關問題