C# Dynamique de la clause where dans une LINQ to SQL de la Requête
Je voudrais exécuter une requête LINQ avec une dynamique où la clause selon la façon dont beaucoup de différentes options d'un utilisateur a entré pour leurs critères.
Est-ce possible?
J'ai posté le code ci-dessous de la façon dont je voudrais que cela fonctionne.
Quelqu'un a des suggestions?
P. S. j'ai essayé en utilisant le .Méthode contains (en générant un OÙ sur SQL, cependant, le nombre de paramètres a été au-dessus de la 2100 seuil et l'origine de l'erreur "LINQ entrants (tabular data stream) appel de procédure distante (RPC) du protocole de flux est incorrect. Trop de paramètres ont été fournis dans cette demande de RPC. 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();
MODIFIER
C'est comme si il pourrait être utile, mais ne fonctionne pas avec une dynamique où?
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
OriginalL'auteur Mark Withers | 2009-08-20
Vous devez vous connecter pour publier un commentaire.
De la accepté de réponse ici: Comment puis-je construire dynamiquement LINQ
Cela fonctionne bien pour .AsQueryable() des classes, mais .Énumérable() des classes peut être utilisé si vous utilisez "comme iQueryable()"
Vous pourriez poster un résumé ici, de sorte que votre réponse se dresse sur son propre.
OriginalL'auteur Joshua
Vous pouvez utiliser une clause de JOINTURE:
OriginalL'auteur Manu
Voici un exemple simple d'utilisation de IQueryable en VB.
Le même code en C#:
OriginalL'auteur TGnat
La réponse que j'ai eu une question similaire a fonctionné pour moi:
Comment ajouter de la dynamique " où " les clauses relatives à une requête linq?
(La réponse est d'utiliser un Prédicat Builder)
OriginalL'auteur Nick