c# 投影最小
投影是一种转换查询结果的操作。 您可以使用投影将对象转换为仅具有应用程序所需属性的新形式。 在本文中,我们将研究如何在C#中使用投影。
若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019 。
首先,让我们在Visual Studio中创建一个.NET Core控制台应用程序项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建新的.NET Core控制台应用程序项目。
投影是指将对象转换为新形式的行为,以使新创建的对象仅包含将要使用的属性。 语言集成查询(LINQ)支持两个标准查询投影运算符Select和SelectMany。
您可以使用Select和SelectMany运算符来投影单个属性,或投影查询的结果,或将数据源中的多个属性投影为匿名类型。 您甚至可以根据需要对投影执行计算,过滤或其他任何操作。
在以下各节中,我们将研究如何在C#中使用这些运算符。
在Program.cs文件中编写以下代码。
public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public Author(int id, string firstName,
string lastName, string address)
{
this.Id = id;
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
}
}
以下代码段说明了如何利用Select运算符查询数据。
var authors = new List
{
new Author(1, "Joydip","Kanjilal", "Hyderabad, INDIA"),
new Author(2, "Anand","Naraswamy", "Cochin, INDIA"),
new Author(3, "Steve","Smith", "Ohio, USA"),
new Author(4, "Uday","Denduluri", "London, UK")
};
foreach(var name in authors.Select(e => e.FirstName))
{
Console.WriteLine(name);
}
当您执行上面的代码片段时,所有作者的名字都将显示在控制台窗口中。
您可以从数据源投影多个属性,甚至还可以投影到匿名类型。 以下代码段说明了如何将多个属性投影到匿名类型中。
var data = authors.Select(e => new { e.FirstName, e.LastName });
您可以利用SelectMany运算符从实现IEnumerable
请注意,Select和SelectMany均从源值中产生结果。 Select从每个源值生成单个结果,而SelectMany从每个源值生成连接的子集合。
现在让我们在Author类中添加一个名为Subjects的额外属性。 此属性是一个字符串列表,其中包含作者撰写书籍的主题名称。
public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public List Subjects { get; set; }
public Author(int id, string firstName, string lastName,
string address, List subjects)
{
this.Id = id;
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
this.Subjects = subjects;
}
}
您可以使用以下代码段创建作者列表。
var authors = new List
{
new Author(1, "Joydip","Kanjilal", "Hyderabad, INDIA",
new List{"C#", "F#"} ),
new Author(2, "Anand","Naraswamy", "Cochin, INDIA",
new List{"C#", "VB.NET"}),
new Author(3, "Steve","Smith", "Ohio, USA",
new List{"C#", "C++"}),
new Author(4, "Uday","Denduluri", "London, UK",
new List{"C#", "VB.NET"}),
new Author(5, "Jane","Barlow", "London, UK",
new List{"C#", "C++"})
};
而且,您可以使用下面的代码片段来检索作者写书的编程语言的名称。
var data = authors.SelectMany(a => a.Subjects).Distinct();
foreach (var subject in data)
{
Console.WriteLine(subject);
}
您可以在SelectMany之后应用Where运算符来过滤结果集。 下面的代码片段在执行时显示了名字和作者的主题,名字的作者以字符“ J”开头并位于英国
var data = authors
.Where(a => a.Address.IndexOf("UK") >= 0)
.SelectMany(a => a.Subjects, (a, Subject) => new { a.FirstName, Subject })
.Where(n => n.FirstName.StartsWith("J"));
foreach(var author in data)
{
Console.WriteLine(author);
}
当执行上述代码片段时,您应该在控制台窗口中看到输出,如下图所示。
IDG使用EF Core时可以使用投影,因此您只能从应用程序所需的基础数据库中检索列。 在以后的文章中,我将讨论一些使用投影的高级操作,例如一对多投影,结果过滤和排序。
翻译自: https://www.infoworld.com/article/3514408/how-to-use-projections-in-c-sharp.html
c# 投影最小