Из-за некоторых бизнес-решений мне нужно немного изменить то, что я делаю. Дай мне. :)LINQ - присоединяется к динамическому запросу
В настоящее время у меня есть:
public IOrderedQueryable<ProductDetail> GetProductList(string productGroupName, string productTypeName, Dictionary<string,List<string>> filterDictionary)
{
string whereClause = "ProductGroupName='" + productGroupName + "' AND ProductTypeName='" + productTypeName + "'";
string comma = "";
foreach (KeyValuePair<string, List<string>> myKVP in filterDictionary)
{
comma = "";
if (myKVP.Value.Count > 0)
{
whereClause = String.Format("{0} AND FieldName = {1} AND FieldValue IN (", whereClause, myKVP.Key);
foreach (string value in myKVP.Value)
{
whereClause = String.Format("{0}{1}'{2}'", whereClause, comma, value);
comma = ",";
}
whereClause = String.Format("{0})", whereClause);
}
}
var q = db.ProductDetail
.Where (whereClause)
.OrderBy ("ProductTypeName");
return q;
}
Вместо Фоинг это непосредственно, теперь я должен присоединиться через 2 другие таблицы, чтобы правильно применить фильтр. Я пытаюсь понять, как правильно присоединиться к динамическому запросу LINQ. В TSQL это было бы примерно так:
SELECT pd.*
FROM ProductDetail pd
INNER JOIN ProductFilterAssignment pfa ON pd.ProductID = pfs.ProductID
INNER JOIN ProductFilter pf ON pfs.FIlterID = pf.FIlterID
WHERE pf.FieldName = 'var1' AND pf.FieldValue IN ('var1a','var1b','var1c',etc)
AND pf.FieldName = 'var2' AND pf.FieldValue IN ('var2a','var2b','var2c',etc)
Я также нашел эту ссылку, которая рассказывает о преобразовании SQL в LINQ. Это может быть полезно: http://blogs.msdn.com/vbteam/archive/tags/Converting+SQL+to+LINQ/default.aspx. Это для VB.NET, но материал там должен быть полезен для C#. –