我通常会进行移动应用开发,但并不总是这样。选择。但是,我已经看过这个用了一点,但我真的不知道它做了什么或者它做了什么。这就像
from a in list select a // a.Property // new Thing { a.Property}
我问,因为当我看到使用.Select()的代码时,我对它的工作感到有点困惑。
答案 0 :(得分:26)
.Select()
来自LINQ的方法语法,代码select
中的from a in list select a
用于查询语法。两者都相同,查询语法编译成方法语法。
您可能会看到:Query Syntax and Method Syntax in LINQ (C#)
<强>投影强>
投影是指将对象转换为对象的操作 新表单通常只包含那些属性 随后使用。通过使用投影,您可以构造一个新类型 这是从每个对象构建的。您可以投影属性并执行 一个数学函数。您也可以投影原件 对象没有改变它。
您可能还会看到: LINQ Projection
调用转换查询结果的过程 投影。您可以在任何过滤器之后投影查询结果 已被应用于更改集合的类型 返回。
List<string> words = new List<string>() { "an", "apple", "a", "day" };
var query = from word in words
select word.Substring(0, 1);
在上面的示例中,仅选择/投影每个字符串实例的第一个字符。
您还可以从集合中选择一些字段并创建anonymous type或现有类的实例,该过程称为投影。
from a in list select new { ID = a.Id}
在上面的代码字段中,Id
被投射到一个匿名类型,忽略其他字段。请考虑您的列表中有MyClass
类型的对象,其定义如下:
class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
现在,您可以将Id
和Name
投影到匿名类型,例如:
查询语法:
var result = from a in list
select new
{
ID = a.Id,
Name = a.Name,
};
方法语法
var result = list.Select(r => new { ID = r.Id, Name = r.Name });
您还可以将结果投影到新类。考虑你有一个类:
class TemporaryHolderClass
{
public int Id { get; set; }
public string Name { get; set; }
}
然后你可以这样做:
查询语法:
var result = from a in list
select new TemporaryHolderClass
{
Id = a.Id,
Name = a.Name,
};
方法语法:
var result = list.Select(r => new TemporaryHolderClass
{
Id = r.Id,
Name = r.Name
});
如果您没有尝试投影到为LINQ to SQL或Entity Framework生成/创建的类,也可以投影到同一个类。
答案 1 :(得分:1)
我的摘要是它需要结果(或结果的子集),并允许您快速重组它以在本地环境中使用。
select子句生成查询结果并指定 “形状”或每个返回元素的类型。例如,您可以指定 您的结果是否仅包含完整的Customer对象 一个成员,一个成员的子集,或一些完全不同的结果 基于计算或新对象创建的类型。
来源:http://msdn.microsoft.com/en-us/library/bb397927.aspx
有很多可能的用途,但其中一个是使用一个复杂的对象,其中许多其他包含一个字符串的属性 - 比如说Name
- 并且允许你只返回枚举Name
的条目。我相信你也可以做相反的事情 - 使用该属性(例如)并在传入属性时创建/返回新类型的对象。
答案 2 :(得分:0)
表示“映射”。将序列的每个元素映射到转换后的序列。在查看图像之前,我还没有理解它的含义。
这个词的含义从哪里来?