我正在嘗試使用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?
我正在嘗試使用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?
我想你實際上意味着
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;
}
是的,我還沒有添加列,但邏輯是健全的。
你還沒有提供任何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
};
您可以在多個步驟構建查詢:
var query = table.Select(x => new {x.Column1, x.Column2, x.Column3});
if (param.HasValue)
query = query.Where(x => x.Column1 == param.Value);
您確定要檢查是否'@ Param1'爲空?這是對查詢輸入的檢查,因此您可以在運行查詢之前執行此操作。 – poke