如何结合这两个LINQ语句?

时间:2012-08-16 06:22:38

标签: c# linq entity-framework

如何将这两个LINQ语句合并为一个?

var Priority = repository.GetMany<Letter>(l => l.UserID == currentUser.ID)
                         .Select(l => l.Priority)
                         .FirstOrDefault();
var User = repository.GetMany<Letter>(l => l.Priority > Priority)
                     .Select(l => l.User)
                     .FirstOrDefault();

我需要获得currentUser的优先级,然后获得具有下一个优先级的下一个用户。例如,如果currentUser的优先级为1,我需要使用优先级== 2的用户。

示例:

letter=new letter { 
    User=Mark, Priority=1
    User=Raha, Priority=2
    User=Searah, Priority=3
}

当currentUser为Mark且优先级为1时,我需要获得优先级= 2的用户,在此示例中为Raha!

1 个答案:

答案 0 :(得分:0)

假设您的GetMany确实只是Where调用,因此它们返回IQueryable,以下应该是我认为的技巧:

var users = repository
    .GetMany<Letter>(l => l.Priority > (
        repository.GetMany<Letter>(
            l2 => l2.UserID = currentUser.ID
        )
        .Select(l2 => l2.Priority)
        .First()
    )
    .OrderBy(l => l.Priority)
    .Select(l => l.User)
    .Take(1);

您的第一个查询基本上只是插入第二个查询。