2010-07-29 80 views
0

删除我有一个LINQ查询如何提高LINQ查询,并在第

var query = from record in session.Query<Record>() 
          from brwSet in session.Query<BorrowerSet>() 
          from brw in session.Query<Borrower>() 
          where 
          brw.PrintOrder == 1 && brwSet.PrintOrder == 0 
          && record.Package.BorrowerSet.Contains(brwSet) 
          && brwSet.Borrower.Contains(brw) 
          select new Summary() 
          { 
           BorrowerFirstName = brw.Contact.FirstName, 
           BorrowerLastName = brw.Contact.LastName, 
           LoanPackageID = record.Id 
          }; 

我怎么能改写这个以消除多余的条款

from brwSet in session.Query<BorrowerSet>() 
from brw in session.Query<Borrower>() 

我怎么能改写这个让我不要在这些集合上不需要包含函数?

record.Package.BorrowerSet.Contains(brwSet) && brwSet.Borrower.Contains(brw) 
+0

你想通过这些建议的改变实现什么?例如你可以用连接来替换2个froms,并将连接条件放在join语句中而不是where子句中,但它会和现有代码做同样的事情,所以为什么要这么做。 – 2010-07-29 22:34:17

+0

我想从美学的条款乘坐额外的条款。我更关心的是去除包含调用,因为这转换为SQL中的in子句。 – 2010-07-30 14:33:26

回答

0

此查询没有Contains。

var query = 
    from record in session.Query<Record>() 
    from brwSet in record.Package.BorrowerSet 
    where brwSet.PrintOrder == 0 
    from brw is brwSet.Borrowers 
    where brw.PrintOrder == 1 
    select new Summary() 
    { 
    BorrowerFirstName = brw.Contact.FirstName, 
    BorrowerLastName = brw.Contact.LastName, 
    LoanPackageID = record.Id 
    }; 
+0

因为brwSet.Borrower是借款人的集合,所以这不起作用。 – 2010-07-30 14:31:44

+0

nhibernate 3也似乎不支持“from brwSet in record.Package.BorrowerSet”语句 – 2010-07-30 14:47:04