【发布时间】:2009-05-11 20:58:04
【问题描述】:
由于一些商业决策,我需要改变一些我正在做的事情。耶我。 :)
目前,我有:
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 的链接。它可能有用:blogs.msdn.com/vbteam/archive/tags/Converting+SQL+to+LINQ/…。它适用于 VB.NET,但其中的内容应该对 C# 仍然有用。