2017-07-16 62 views
1

我有一個List lstStudents = GetStudents()//這個方法可以返回null。 現在,我想在我的數據庫表的學生運行此查詢,檢查LINQ to SQL查詢中的List是否爲空?

var result = (from c in student 
      where lstStudents.Contains(c.name) 
      select c); 

如何檢查是否lstStudents是不是查詢裏面空。

注:我知道我可以在查詢運行之前檢查它,但由於某些其他原因我無法做到這一點。如果我嘗試(lstStudents!= null)在查詢內部出錯。

無法比較 'System.Collections.Generic.List`1 [[System.String,mscorlib程序, 版本= 4.0.0.0,文化=中性公鑰= b77a5c561934e089]]' 類型的元素。 僅支持原始類型,枚舉類型和實體類型 。

任何幫助表示讚賞。

+2

'lstStudents'是LINQ查詢外,你更好的聲明前檢查。並處理如果'lstStudents'爲空 – Bhaarat

+0

當'lstStudents'爲空時你想得到什麼?請在問題中描述它。 –

+0

「注意:我知道在查詢運行前我可以檢查它,但由於某些其他原因,我無法做到這一點。」 - 請詳細說明其他原因,因爲這正是你應該做的。如果有什麼阻止,也許這可以解決。 – hvd

回答

-1

這應該工作

var result = db.users.Where(x=> list != null && list.Any(a=> 
a.Contain(x.Email))); 
+1

'?.'在表達式樹中是不允許的。 – hvd

0
public List<string> GetStudents() 
{ 
    return null; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    using(var ed = new DataClasses1DataContext()) 
    { 
     List<string> lstStudents = GetStudents(); 

     var tst = 
      (from c in ed.Baleni 
      where (lstStudents ?? new List<string>()).Contains(c.b_poznamka) 
      select c) 
     .ToList(); 
    } 
} 

.NET 4.0.0.0,工作沒有問題(我只在我的數據庫使用不同的表)。

+0

不適用於我。我不認爲?可以理解爲SQL – Kavish

+0

它適用於Linq2Sql。但它確實可能不適用於所有其他提供者,因此指定您使用哪一個將是有幫助的。 –

+1

我正在使用mysql devart ef provider。 – Kavish

0

@Bhaarat是正確的:

var query = student; 
if (lstStudents != null) 
{ 
    query = query.Where(c=>lstStudents.Contains(c.name)); 
} 
var result = query;