我想使用動態where子句執行LINQ查詢,具體取決於用戶爲其條件輸入了多少個不同的選項。C#LINQ to SQL查詢中的動態WHERE子句
這可能嗎?
我已經發布瞭如何使用它的代碼。
任何人有任何建議嗎?
P.S.我試圖使用.Contains方法(在SQL上生成WHERE IN,但是參數數量高於2100閾值並導致錯誤「LINQ傳入的表格數據流(TDS)遠程過程調用(RPC)協議流不正確。太多的參數在此RPC請求中提供。最大值爲2100" 。
private struct ProductStruct
{
public long ProductID;
}
private struct FilterStruct
{
public long ProductTypeFieldID;
public long ValueNumber;
}
List filterList = new List();
filterList.Add(new FilterStruct { ProductTypeFieldID = 3, ValueNumber = 195 });
filterList.Add(new FilterStruct { ProductTypeFieldID = 8, ValueNumber = 55 });
List productList = new List();
productList = (from pfv in dC.ProductFieldValues
where
foreach (FilterStruct filter in filterList)
{
pfv.ProductTypeFieldID == filter.ProductTypeFieldID
&& pfv.ValueNumber == filter.ValueNumber
}
select new ProductStruct
{
ProductID = pfv.ProductID
}).ToList();
編輯
這看起來好像它可能是很方便,但有一個動態不起作用其中?
private void Option2()
{
try
{
LinqDataDataContext dataConnection = new LinqDataDataContext(ConnectionString);
List filterList = new List();
filterList.Add(new FilterStruct { ProductTypeFieldID = 3, ValueNumber = 195 });
filterList.Add(new FilterStruct { ProductTypeFieldID = 8, ValueNumber = 55 });
string whereClause = null;
foreach (FilterStruct filter in filterList)
{
if (whereClause != null)
whereClause += "AND ";
whereClause += string.Format("ProductID IN (SELECT ProductID FROM ProductFieldValue WHERE ProductTypeFieldID = {0} AND ValueNumber = {1})", filter.ProductTypeFieldID, filter.ValueNumber);
}
List productList = new List();
productList = (from pfv in dataConnection.ProductFieldValues.Where(whereClause)
select new ProductStruct
{
ProductID = pfv.ProductID
}).ToList();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
thanks in advance
我認爲使用動態LINQ並將where子句構建爲字符串的想法具有優點。 – tvanfosson 2009-08-20 13:28:30
您可能想在此發佈摘要,所以您的答案是獨立的。 – tvanfosson 2009-08-20 13:29:05