Aufgrund einiger Geschäftsentscheidungen muss ich etwas von dem, was ich tat, ändern. Yay mich. :)LINQ - Joins in einer dynamischen Abfrage
Derzeit habe ich:
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;
}
Statt diese von FOING direkt, ich brauche jetzt durch zwei weitere Tabellen verknüpfen den Filter korrekt anzuwenden. Ich versuche herauszufinden, wie man einer dynamischen LINQ-Abfrage korrekt beitritt. In TSQL wäre es so etwas wie:
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)
Ich habe auch diesen Link gefunden, der über die Konvertierung von SQL nach LINQ spricht. Es könnte nützlich sein: http://blogs.msdn.com/vbteam/archive/tags/Converting+SQL+to+LINQ/default.aspx. Es ist für VB.NET, aber das Zeug dort sollte immer noch nützlich für C# sein. –