相关疑难解决方法(0)

Linq PredicateBuilder - 多个OR

我正在尝试使用PredicateBuilder,如此处所述 - http://www.albahari.com/nutshell/predicatebuilder.aspx

以下代码

var predicate = PredicateBuilder.False<StreetDTO>();

        predicate = predicate.Or(p => p.Locality.Contains(criteria.Locality));
        predicate = predicate.Or(p => p.Name.Contains(criteria.Name));
        predicate = predicate.Or(p => p.Town.Contains(criteria.Town));

        List<StreetDTO> streetData = StreetData.Instance();

        var streetList = from street in streetData.Where(predicate)
                         select street;
Run Code Online (Sandbox Code Playgroud)

根据这个例子,据我所知,这应该有效

var newKids  = Product.ContainsInDescription ("BlackBerry", "iPhone");

var classics = Product.ContainsInDescription ("Nokia", "Ericsson")
                      .And (Product.IsSelling());
var query =
  from p in Data.Products.Where (newKids.Or (classics))
  select p;
Run Code Online (Sandbox Code Playgroud)

但我得到的只是

错误1无法从用法中推断出方法'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.

我正试图在LINQ'在职'获得一些理解,所以如果这是一个简单的问题,请道歉.

c# linq

15
推荐指数
2
解决办法
2万
查看次数

DDD:存储库合约

我在很多地方读到,DDD 中的一项重要要求是为存储库制定有限制的合同:

findByName(string name)
findByEmail(string email)
etc.
Run Code Online (Sandbox Code Playgroud)

并且不提供通用的查询接口:

findBySpecification(Specification spec)
Run Code Online (Sandbox Code Playgroud)

我确实理解为什么这很重要:能够模拟存储库进行测试,或更改底层的持久性框架。

虽然在整个应用程序中执行此规则并不难,但在为用户提供“高级搜索”表单时,我不知道如何执行它。

假设我有一个表单,允许按关键字、按日期、按作者等搜索博客文章。

这些标准可以自由组合,我显然无法为每个用例提供一种方法:

findByKeyword(string keyword)
findByDateRange(Date from, Date to)
findByKeywordAndDateRange(string keyword, Date from, Date to)
findByDateRangeAndAuthor(Date from, Date to, User author)
etc.
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了什么或者它是规则的例外之一?

orm domain-driven-design design-by-contract repository ddd-repositories

5
推荐指数
1
解决办法
1092
查看次数