2012-08-16 151 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); 

你的第一個查詢基本上只是插在第二個查詢。