Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有属性或字段';p';存在于类型'中;productByCategory';_C#_Linq_Linq To Sql_Predicate_Dynamic Linq - Fatal编程技术网

C# 没有属性或字段';p';存在于类型'中;productByCategory';

C# 没有属性或字段';p';存在于类型'中;productByCategory';,c#,linq,linq-to-sql,predicate,dynamic-linq,C#,Linq,Linq To Sql,Predicate,Dynamic Linq,我试图创建一个动态查询来过滤我的数据结果。我正在构建一个包含子查询的linqToSql查询,然后使用 System.Linq.Dynamic。但我的方法以错误告终,我无法在图书馆样本中找到大量的文档 这就是我要做的。在使用添加的子查询获取结果后,我使用列表按给定的筛选器ID筛选数据: List<long?> filter_list = new List<long?>(); string query = "";

我试图创建一个动态查询来过滤我的数据结果。我正在构建一个包含子查询的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 []{ '|','|'});
List filter_List=newlist();
字符串查询=”;
if(映射的_过滤器!=null)
如果(映射的过滤器长度>0)
{
int i=0;
foreach(映射的\u筛选器中的字符串项)
{
长过滤器=0;
长锥虫(项目,外滤器);
过滤器列表。添加(过滤器);
查询+=“p.prod_attrs.Contains(@“+i+”)| |”;
i++;
}
}
query=query.TrimEnd(新字符[]{'|','|'});
以下是我的产品上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();
var productByCategory=db.products.Where(p=>p.is\u active==true&&p.mainCat\u id==cat\u id)。
选择(p=>new productByCategory
{
id=p.id,
产品名称=产品名称,
prod\u price=db.product\u pricings.Where(pr=>pr.prod\u id==p.id&&pr.currency\u id==2).FirstOrDefault(),
//下面的过滤器
prod\u attrs=db.prod\u attr\u maps.Where(pa=>pa.prod\u id==p.id&&pa.is\u active==true
&&pa.currency_id==2)
.Select(pa=>pa.attr_id).ToList()
}).其中(p=>
(p.prod\U价格。我方产品价格+p.prod\U价格。运输成本)>=min&&
(p.prod_price.our_price+p.prod_price.shipping_cost)p.newItem).ToList();
但这最终是错误的:

“productByCategory”类型中不存在属性或字段“p” ..... 解析异常

到目前为止,我已经尝试过更换

.Where(“p=>”+查询、筛选列表)

.Where(“+”查询,筛选列表)

并查询部分到

查询+=“产品属性包含(@“+i+”)| |”

但仍然是相同的错误p被prod_attrs异常替换

编辑

我在查询中直接放置了一些字符串,当我这样查询时,动态linq dll似乎有问题:

.Where(“id==1&&prod\u name.Contains(\“a\”)可以正常工作

但是

其中(“id==1&&prod\u name.Contains(1)”)

结果是错误的:

中发生“System.InvalidOperationException”类型的异常 System.Core.dll,但未在用户代码中处理

其他信息:类型上没有泛型方法“包含” “System.Linq.Enumerable”与提供的类型兼容 争论和争论。如果 方法是非泛型的


因此,这显然是动态linq库的功能问题。

生成动态查询后,
query
的值是什么样子的?p=>p.prod_attrs.contains(1)| p.prod_attrs.contains(2)。。。。。。与此类似,它直接对筛选器ID求值使用
prod_attrs
,这样查询将变成这样:
prod_attrs.contains(1)| | prod_attrs.contains(2)
也尝试过了,请阅读我的最后一个问题仍然得到例外在这样的更改后,您可以显示
query
的值吗?生成动态查询后
query
的值是什么样子的?p=>p.prod\u attrs.contains(1)| | p.prod\u attrs.contains(2)。。。。。。像这样,它对过滤器ID求值使用
prod_attrs
直接使查询变成这样:
prod_attrs.contains(1)| | prod_attrs.contains(2)
也尝试过了,请阅读我的最后一个问题仍然得到例外在这样的更改后您能显示
query
的值吗?