2012-08-16 111 views
1

如何将这两个LINQ语句合并为一个?如何结合这两个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优先级为1,我需要得到有优先权== 2.

实施例的用户:

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

当currentUser是马克具有优先级= 1,我需要得到用户优先级= 2,在这个样本中Raha!

+1

您能否提供更多关于如何将两者结合的信息?你期望从组合表达中得到什么结果? – danish 2012-08-16 06:24:21

+2

小调; “下一个用户”可能是不可靠的,直到你添加一个OrderBy – 2012-08-16 06:26:08

+0

不,当我说下一个用户,我的意思是下一个用户与下一个优先权! – 2012-08-16 06:27:40

回答

0

假设你GetMany确实只是其中的呼叫,因此他们返回一个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); 

你的第一个查询基本上只是插在第二个查询。