没有财产或字段' p'存在于' productByCategory'

时间:2016-01-03 15:59:46

标签: c# linq linq-to-sql predicate dynamic-linq

我正在尝试创建一个动态查询来过滤我的数据结果。我正在构建一个包含子查询的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库的功能问题。

0 个答案:

没有答案