Je souhaite exécuter une requête LINQ avec une clause dynamic where en fonction du nombre d'options saisies par l'utilisateur pour ses critères.C# Clause WHERE dynamique dans une requête LINQ to SQL
Est-ce possible?
J'ai posté un code ci-dessous sur la façon dont je voudrais que cela fonctionne.
Quelqu'un a-t-il des suggestions?
P.S. J'ai essayé d'utiliser la méthode .Contains (générant un WHERE IN sur SQL, cependant le nombre de paramètres était supérieur au seuil 2100 et provoquait l'erreur "LINQ Le flux du protocole d'appel de procédure distante (RPC) du flux de données tabulaire entrant (TDS) est incorrect . ont été fournis dans cette requête RPC Trop de paramètres. Le maximum est de 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
cela semble que cela pourrait être un travail à portée de main, mais ne marche pas avec une dynamique où en?
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
Je pense que l'idée d'utiliser Dynamic LINQ et de construire la clause where en tant que chaîne a du mérite. – tvanfosson
Vous pourriez vouloir poster un résumé ici, ainsi votre réponse se tient toute seule. – tvanfosson