2011-11-30 148 views
2


我一直在嘗試一些LINQ查詢可有人請說明如何下面的SQL查詢來LINQ轉換:基礎 - SQL查詢到LINQ查詢

SELECT *, firstname+' '+lastname AS FullName FROM Client WHERE age > 25; 

不要擔心,其中部分(把它放在更完整的位置)更多的徘徊如何實現第一部分。

現在我也碰到過這樣的事情:

from c in dc.Clients select new {FullName = c.firstname + " "+c.lastname} 

但我不知道如何得到它來選擇一切沒有具體說明,即:

{firstname = c.firstname, id = c.id ..... etc} 

,但我希望換一種方式來實現這一點。

所以我只是遊蕩,如果有人能告訴我正確的或實現這一點的另一種方式:)

感謝所有:)

回答

1

你要選擇那麼實際的項目交給其屬性。無法將單個列擴展爲匿名類型。

var query = from c in dc.Clients 
      where c.Age > 25 
      select new 
      { 
       Client = c, 
       FullName = c.firstname + " " + c.lastname 
      }; 

foreach (var item in query) 
{ 
    // item.Client.Id 
    // item.FullName 
    // item.Client.FirstName 
} 

選擇實際項目可讓您訪問您用來構造匿名類型的相同屬性。這並不是一個完全的浪費,儘管如果查詢有更多的事情發生,比如與另一個表的連接,並且包括來自匿名類型的字段以及整個對象。

0

您不能使用Linq2Sql或EF自動生成每一列(但是您可以找到一種方法來模擬像Dapper和大量微觀模式這種行爲)。

更方便,你可以選擇帶有3個字段,名字,姓氏和像一個客戶端一個新的匿名類型:

from c in dc.Clients 
select new 
{ 
    FullName = c.firstname + " "+c.lastname, 
    Client = c 
} 

不過我建議只選擇那些你真正需要的屬性。這迫使您考慮如何編寫查詢以及查詢打算做什麼(因此選擇)。或者,您可以選擇客戶端,並使用一些擴展方法來選擇全名。如:

public static string GetFullName(this Client client){ return client.firstname + " " + client.lastname; }