我通常做移动应用程序开发,但并不总是有.选择.但是,我已经看过这个用了一点,但我真的不知道它做了什么或它是如何做它做的任何事情.这有点像
from a in list select a // a.Property // new Thing { a.Property}
Run Code Online (Sandbox Code Playgroud)
我问,因为当我看到使用.Select()的代码时,我对它的作用感到有些困惑.
Hab*_*bib 31
.Select()
来自LINQ的方法语法,select
在您的代码中from a in list select a
是用于查询语法.两者都相同,查询语法编译成方法语法.
您可能会看到: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);
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,仅选择/投影来自每个字符串实例的第一个字符.
您还可以从集合中选择一些字段并创建匿名类型或现有类的实例,该过程称为投影.
from a in list select new { ID = a.Id}
Run Code Online (Sandbox Code Playgroud)
在上面的代码字段Id
中,投影到一个匿名类型,忽略其他字段.请考虑您的列表具有类型MyClass
定义的对象:
class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以投影Id
并Name
以匿名类型,如:
查询语法:
var result = from a in list
select new
{
ID = a.Id,
Name = a.Name,
};
Run Code Online (Sandbox Code Playgroud)
方法语法
var result = list.Select(r => new { ID = r.Id, Name = r.Name });
Run Code Online (Sandbox Code Playgroud)
您还可以将结果投影到新类.考虑你有一个类:
class TemporaryHolderClass
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
查询语法:
var result = from a in list
select new TemporaryHolderClass
{
Id = a.Id,
Name = a.Name,
};
Run Code Online (Sandbox Code Playgroud)
方法语法:
var result = list.Select(r => new TemporaryHolderClass
{
Id = r.Id,
Name = r.Name
});
Run Code Online (Sandbox Code Playgroud)
您也可以投影到同一个类,前提是您没有尝试投影到为LINQ to SQL或Entity Framework生成/创建的类.
归档时间: |
|
查看次数: |
13020 次 |
最近记录: |