2012-01-06 73 views
2
var listOfStates = from n in _storageStates 
        select n.tag; 

如果n.tag是一個字符串,我需要使用new關鍵字。linq使用字符串時需要新的關鍵字

var listOfStates = from n in _storageStates 
        select new {n.tag}; 

我想不是因爲字符串是內置類型而不是類,但我不確定。

+3

不,不是必需的。 – 2012-01-06 20:46:36

+0

'new'與LINQ無關。 – SLaks 2012-01-06 20:48:14

+1

你嘗試過嗎?這將清除你的問題。 – mydogisbox 2012-01-06 20:48:25

回答

6

什麼你經常看到的是一樣的東西:

var listOfStates = from n in _storageStates 
        select new { n.tag, n.foo }; 

這將創建一個anonymous type這是一個有用的方式將多個值分組在一個強類型,但有點特別的方式。您可以這樣一個值做到這一點:

var listOfStates = from n in _storageStates 
        select new { n.tag }; 

但通常,使結果更加努力而不是容易的工作。

請注意,匿名類型不限於在LINQ中使用,儘管這可能是他們最常遇到的地方。按照更早的MSDN鏈接獲取更多信息。

2

你不需要新的關鍵字。你的第一個例子應該按預期工作。

// single field 
var listOfStates = from n in _storageStates 
        select n.tag; 

// multiple fields require, at least, an anonymous type 
var listOfStatesAndCapitals = from n in _storageStates 
           select new { n.tag, n.capital }; 
1

不,除非你正在創建一個新的對象(如果你不是單個字段中選擇更多)不需要一個新的對象。 new關鍵字可用於select語句中,但必須將其用作有效表達式。下面的例子:

var listOfStates = from n in _storageStates 
        select new State(n.Tag); 

new關鍵字也可以用來創建使用以下語法匿名類型:

var listOfStates = from n in _storageStates 
        select new { n.Tag }; 
2

不,你實際上並沒有創造不需要new關鍵字: