2012-01-06 74 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关键字: