我有一個這樣的對象:基於空參數Linq查詢建設
public class Filters
{
List<string> A { get; set; }
List<string> B { get; set; }
}
我將用它作爲將在數據庫執行查詢的功能參數。 這些itens,A和B將指示「where」過濾器。
請看下面的代碼:
//Filters Initialization
Filters TestFilters = new Filters();
TestFilters.A = new List<string>();
TestFilters.B = new List<string>(new string[] {"testfilter1","testfilter2"}); //WHERE B == "testfilter1" OR B == "testfilter2"
//Call of the function that executes SELECT on DB
List<Table> Result = TestFunction(TestFilter);
功能:
public static List<Table> TestFunction(Filters pParameter)
{
ExampleDataContext dc = new ExampleDataContext(Properties.Settings.Default.ExampleConnectionString);
List<Table> SelectResult = new List<Table>();
if (pParameter.A.count != 0 && pParameter.B.count != 0)
SelectResult = (from x in dc.Table
where pParameter.A.Contains(x.A)
where pParameter.B.Contains(x.B)
select x).ToList();
else if (pParameter.A.count == 0 && pParameter.B.count != 0)
{
SelectResult = (from x in dc.Table
where pParameter.B.Contains(x.B)
select x).ToList();
}
else if (pParameter.A.count != 0 && pParameter.B.count == 0)
{
SelectResult = (from x in dc.Table
where pParameter.A.Contains(x.A)
select x).ToList();
}
else if (pParameter.A.count == 0 && pParameter.B.count == 0)
{
SelectResult = (from x in dc.Table
select x).ToList();
}
return SelectResult;
}
有時A或/和B是/都是空的,那麼我使用 「IF」 結構來處理它。 也許我可能會遇到一個問題,即我的過濾器更大,超過2個參數,編碼會很困難/無聊。 我的問題是:它正在工作,但有沒有另一種方式來做到這一點,而不是使用IF?
你應該使用鏈式LINQ查詢,這是與新的查詢繼續舊的查詢結果。你不應該每次都在x上查詢。 –