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