2015-09-04 155 views
0

我正在嘗試使用Linq做些事情,我可能想要所有的項目,或者我可能需要項目的一個子集。這將基於一個可爲空的int(int?)。相當於ColumnName = @Param或@Param的Linq IS NULL

在SQL我會做:

SELECT Column1, Column2, Column3 
FROM dbo.MyTable 
WHERE Column1 = @Param1 OR @Param1 IS NULL 

我可以做這樣的事情在LINQ?

+2

您確定要檢查是否'@ Param1'爲空?這是對查詢輸入的檢查,因此您可以在運行查詢之前執行此操作。 – poke

回答

0

我想你實際上意味着

select col1, col2, col3 
FROM dbo.MyTable 
WHERE Column1 = @Param1 OR Column1 = null 

如果是這樣,這是從X在MyTable的 其中(x.Column1 == NULL)查詢 VAR的結果= || (x.Column1 == param1) select x;

或者你想選擇全部爲空時?

然後運行不同的查詢

if(param1.IsNull()) 
{ 
    result = from x in MyTable 
     select x; 
} 
else 
{ 
    result = from x in MyTable 
     where x.Column1 == param1 
     select x; 
} 

是的,我還沒有添加列,但邏輯是健全的。

0

你還沒有提供任何C#代碼,所以我不知道你的實體,但如果你使用EF,你應該得到一個名爲MyTable的實體。此外,下面的linq查詢返回一個匿名類型,您可能想用類替換它。

假設@Param1參數的變量名是Param1,dbContext是您的DataContext對象,linq代碼應該如下所示。

var result = from t in dbContext.MyTable 
where Param1 = null or t.Column1 = Param1 
select new { 
    Column1 = t.Column1, 
    Column2 = t.Column2, 
    Column3 = t.Column3 
}; 
0

您可以在多個步驟構建查詢:

var query = table.Select(x => new {x.Column1, x.Column2, x.Column3}); 

if (param.HasValue) 
    query = query.Where(x => x.Column1 == param.Value);