UnitOfWork嵌套查询

时间:2015-07-06 17:53:26

标签: c#

我试图转换旧查询以调整我的unitofwork存储库模式。

它不喜欢我的嵌套查询并生成An expression tree may not contain a call or invocation that uses optional arguments

原始查询

Clients = (from  z in ctx.Interactions
           where !z.Attendees
               .Any(y => ctx.LoanParties
                   .Any(party => party.Person_Id == y.Person.Id && 
                         select z).Count();

工作单位查询

Clients  = UnitOfWork.InteractionRepository.Get(
                z => !z.Attendees.Any(
                        y =>
                            !(UnitOfWork.LoanPartyRepository.Get(
                                party =>
                                    party.Person_Id == y.Person.Id).Any())))
                .Select(z => z)
                .AsParallel()
                .Count();

Intellisense不喜欢嵌套的unitofwork查询末尾的.Any()。请问用工作单元做嵌套查询的正确语法是什么?

1 个答案:

答案 0 :(得分:1)

您可能只是缺少一些参考资料。

但是,如果要正确执行此操作,则应将整个逻辑封装在存储库中(以便使用IQueryable而不是IEnumerable)。这样查询将由数据库处理并且将更快。它也可以重复使用。

  1. InteractionRepository创建其他方法,例如GetWithSpecificCondition
  2. 移动尽可能多的代码形式
  3. 不要在里面使用LoanPartyRepository - 只需使用DbContext