gpt4 book ai didi

linq - 什么是 LINQ 中的投影,如 .Select()

转载 作者:行者123 更新时间:2023-12-04 01:25:50 26 4
gpt4 key购买 nike

我通常做移动应用程序开发,它并不总是有 .Select。但是,我已经看到它使用了一些,但我真的不知道它做什么或它做什么。它就像

    from a in list select a // a.Property // new Thing { a.Property}

我这么问是因为当我看到使用 .Select() 的代码时,我对它在做什么感到有点困惑。

最佳答案

.Select()来自 LINQ 的方法语法,select在您的代码中 from a in list select a用于查询语法。两者都是一样的,查询语法编译成方法语法。

您可能会看到:Query Syntax and Method Syntax in LINQ (C#)

投影:

Projection Operations - MSDN

Projection refers to the operation of transforming an object into a new form that often consists only of those properties that will be subsequently used. By using projection, you can construct a new type that is built from each object. You can project a property and perform a mathematical function on it. You can also project the original object without changing it.



您可能还会看到:
LINQ Projection

The process of transforming the results of a query is called projection. You can project the results of a query after any filters have been applied to change the type of the collection that is returned.



Example from MSDN
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; }
}

现在您可以投影 IdName匿名类型,如:

查询语法:
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)。考虑你有一个类:
    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 生成/创建的类。

关于linq - 什么是 LINQ 中的投影,如 .Select(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23251976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com