2009-10-09 63 views
8

我的代碼是:簡單的Linq問題:如何選擇多個列?

  List<Benutzer> users = (from a in dc.Benutzer 
            select a).ToList(); 

我需要這個代碼,但我只希望在「Benutzer」 - 表來選擇20列第3。 那是什麼語法?

+1

You have type'Benutzer'?曾考慮過使用本地化的C#? 'Liste benutzer =(aus a in dc.Benutzerwählea).ZuListe();';) – 2009-10-09 09:41:23

回答

20

這裏有一個查詢表達式:

var users = (from a in dc.Benutzer 
      select new { a.Name, a.Age, a.Occupation }).ToList(); 

或者用點表示:

var users = dc.Benutzer.Select(a => new { a.Name, a.Age, a.Occupation }) 
         .ToList(); 

注意它返回一個anonymous type的列表,而不是Benutzer實例。就個人而言,我更喜歡這種方法來創建部分填充的實例列表,因爲任何處理部分實例的人都需要檢查它們是否來自於找出真正存在的內容。

編輯:如果你真的想建立的Benutzer實例,LINQ是不是讓你在查詢中這樣做(我不知道爲什麼)你總是可以做:

List<Benutzer> users = dc.Benutzer 
    .Select(a => new { a.Name, a.Age, a.Occupation }) 
    .AsEnumerable() // Forces the rest of the query to execute locally 
    .Select(x => new Benutzer { Name = x.Name, Age = x.Age, 
           Occupation = x.Occupation }) 
    .ToList(); 

即使用匿名類型就像一個DTO。請注意,返回的Benutzer對象不會與上下文關聯。

+1

我可以怎麼樣呢? – Kovu 2009-10-09 08:59:07

+2

「typisite」是什麼意思? – 2009-10-09 09:01:03

+1

我想要的類型是Benutzer,而不是匿名。 – Kovu 2009-10-09 09:01:45

4
List<Benutzer> users = (from a in dc.Benutzer 
          select new Benutzer{ 
          myCol= a.myCol, 
          myCol2 = a.myCol2 
          }).ToList(); 

我想這就是你想要的,如果你想做出同樣的列表。但是,假設您設置的屬性具有公開設置者。

+1

我得到一個錯誤,我不能在那裏使用「Benutzer」。 – Kovu 2009-10-09 08:57:38

+1

你需要一個逗號來分隔字段,儘管我懷疑這就是爲什麼它正在破解 – qui 2009-10-09 09:13:12

+1

我剛剛在我的機器上用一個非常相似的用例對它進行了嘗試,並且它工作正常。你能粘貼確切的錯誤嗎? – qui 2009-10-09 09:16:04

1

嘗試:

var list = (from a in dc.Benutzer select new {a.Col1, a.Col2, a.Col3}).ToList(); 

,但現在你有匿名對象不是Benutzer對象列表。