我正在尝试创建一个动态查询来过滤我的数据结果。我正在构建一个包含子查询的linqToSql查询,并在使用之后过滤结果 System.Linq.Dynamic 。但是我的方法最终出现了错误,我无法找到大量关于库样本的文档。
这是我想要做的。在使用添加的子查询获取结果后,我使用列表按给定的过滤器ID过滤数据:
List<long?> filter_list = new List<long?>();
string query = "";
if(mapped_filters!=null)
if (mapped_filters.Length > 0)
{
int i=0;
foreach (string item in mapped_filters)
{
long filter = 0;
long.TryParse(item, out filter);
filter_list.Add(filter);
query += " p.prod_attrs.Contains(@"+i+") ||";
i++;
}
}
query = query.TrimEnd(new char []{ '|','|'});
以下是我产品上linq fetch的代码:
var productByCategory = db.products.Where(p => p.is_active == true && p.mainCat_id == cat_id).
Select(p => new productByCategory
{
id = p.id ,
prod_name = p.product_name,
prod_price = db.product_pricings.Where(pr => pr.prod_id == p.id && pr.currency_id == 2).FirstOrDefault(),
//filters below
prod_attrs = db.prod_attr_maps.Where(pa => pa.prod_id == p.id && pa.is_active == true
&& pa.currency_id == 2)
.Select(pa => pa.attr_id).ToList()
}).Where(p =>
(p.prod_price.our_price + p.prod_price.shipping_cost) >= min &&
(p.prod_price.our_price + p.prod_price.shipping_cost) <= max)
.Where("p=>"+query,filter_list)
.OrderBy(p => p.newItem).ToList();
但这最终导致错误:
没有财产或字段&#39; p&#39;存在于&#39; productByCategory&#39; .....解析异常
到目前为止,我已尝试更换
。在哪里(&#34; p =&gt;&#34; +查询,filter_list)
到
.Where(&#34;&#34; + query,filter_list)
并查询部分
查询+ =&#34; prod_attrs.Contains(@&#34; + i +&#34;)||&#34 ;;
但仍然将相同的错误p替换为prod_attrs异常。
修改
我在查询中做了一些直接的字符串放置,这看起来像动态linq dll的问题,当我这样查询时:
.Where(&#34; id == 1&amp;&amp; prod_name.Contains(\&#34; a \&#34;)&#34;)它工作正常< / p>
但是
.Where(&#34; id == 1&amp;&amp; prod_name.Contains(1)&#34;)
最终导致错误:
类型&#39; System.InvalidOperationException&#39;的例外情况发生在 System.Core.dll但未在用户代码中处理
其他信息:没有通用方法&#39;包含&#39;在类型上 &#39; System.Linq.Enumerable&#39;与提供的类型兼容 参数和论点。如果是,则不应提供类型参数 方法是非通用的。
因此,它似乎是动态linq库的功能问题。