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