Я хотел бы выполнить запрос LINQ с динамическим предложением where в зависимости от того, сколько различных вариантов пользователь ввел для своих критериев.
Возможно ли это?
Я разместил код ниже, как я хотел бы, чтобы он работал.
Кто-нибудь получил какие-либо предложения?
P.S. Я попытался использовать метод .Contains (генерирование WHERE IN в SQL, однако число параметров превысило пороговое значение 2100 и вызвало ошибку "LINQ Неверный поток протокола вызова RPC для потока табличных данных (TDS) . Слишком много параметров было предоставлено в этом запросе 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();
EDIT
Это выглядит так, как будто это может быть удобно, но не работает с динамикой где в?
<code>
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