Mar*_*čič 5 c# dynamic linq-to-sql
我正在使用动态LINQ库 进行过滤的大型应用程序.
我的数据访问层中的所有类都派生自一个共同的祖先DALAncestor,其中包括定义方法GetData:public abstract List GetData(Filter filter)
对于Customer,此方法的实现看起来像这样(简化):
public override List<Entities.Customer> GetData(Filter filter) {
var customers = from c in db.Customers
select new Entites.Customer {
ID = c.ID,
FullName = c.Name,
Country = c.Country
};
return = filter.Apply(customers).ToList();
}
Run Code Online (Sandbox Code Playgroud)
"Apply"是一种获取条件集合并使用Dynamic LINQ Libary应用所有条件的方法.
方法GetData被调用如下:
private void DemoCallGetDataMethod() {
var filter = new Filter();
filter.AddCondition("Country", "Austria");
var list = myCustomerDAL.GetData(filter);
// do something
}
Run Code Online (Sandbox Code Playgroud)
SQL Server获取一个选择语句:
SELECT [t0].ID, [t0].Name, [t0].Country
FROM Customer [t0]
WHERE [t0].Country = @p0
Run Code Online (Sandbox Code Playgroud)
(@ p0是一个参数,其值设置为"奥地利").
如果我只想在"顶层"(主)级别上过滤值,那么一切都很有效.但是,由于我在过滤器表单上的用户输入上构建了我的过滤器,因此在某些情况下,用户希望按详细级别的值过滤(即,只有在用户单击"搜索"后才能知道要过滤的列).
我无法找到解决方案:"从奥地利购买百事可乐的所有客户".
我尝试了几件事,但似乎都没有.基本思想是:
1.将对CONTAINS的支持添加到DynamicLibrary
2.将我的代码更改为
public override List<Entities.Customer> GetData(Filter filter) {
var customers = from c in db.Customers
select new Entites.Customer {
ID = c.ID,
FullName = c.Name,
Country = c.Country,
Items = c.Order.SelectMany(o => o.Item).Select(i => i.ItemId).ToList()
};
return = filter.Apply(customers).ToList();
}
private void DemoCallGetDataMethod() {
var filter = new Filter();
filter.AddCondition("Country","=", "Austria");
filter.AddCondition("Items","Contains", "11"); // 11 = Id for Pepsi
var list = myCustomerDAL.GetData(filter);
// do something
}
Run Code Online (Sandbox Code Playgroud)
抛出的照片是:
System.InvalidOperationException:类型'System.Linq.Enumerable'上没有泛型方法'Contains'与提供的类型参数和参数兼容.如果方法是非泛型的,则不应提供类型参数.
有谁知道我做错了什么?或者我只是朝着错误的方向前进,我应该尝试其他一些方法?哪一个?:)
编辑:改变了我的榜样
小智 2
\n\n\n@user182630我希望能够在一般情况下按子选择中的值进行过滤,而不仅仅是针对特定情况。该文章中的方法仅在对过滤器进行硬编码时才有效,而这不是我能做的事情。\xe2\x80\x93 Marko Juvan\xc4\x8di\xc4\x8d 9 分钟前
\n
阅读这篇文章http://csharpindepth.com/articles/chapter5/closures.aspx
\n 归档时间: |
|
查看次数: |
1357 次 |
最近记录: |