📅  最后修改于: 2023-12-03 15:39:40.065000             🧑  作者: Mango
LINQ(语言集成查询)是.NET Framework 3.5引入的一项功能,它允许开发人员使用类似于SQL的语言(称为查询表达式)在.NET语言中查询数据。在本文中,我们将介绍一些与LINQ相关的示例代码。
下面是一个创建LINQ查询的简单示例,它返回整数数组中所有大于5的数字:
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var query = from num in numbers
where num > 5
select num;
foreach (int num in query)
{
Console.WriteLine(num);
}
这个例子从numbers
数组中选择大于5的数字,并将它们存储在query
变量中。然后使用foreach
循环将query
中的结果打印出来。
下面是一个使用LINQ查询来筛选字符串集合的例子:
List<string> names = new List<string> { "Adam", "Bob", "Charlie", "David", "Ellen" };
var query = from name in names
where name.StartsWith("A") || name.StartsWith("E")
orderby name descending
select name;
foreach (string name in query)
{
Console.WriteLine(name);
}
这个例子从names
集合中选择以"A"或"E"开头的字符串,并按字母顺序(从大到小)对它们进行排序。然后使用foreach
循环将query
中的结果打印出来。
下面是一个使用LINQ查询将一个字符串集合投影到一个新的Person
类型的例子:
List<string> names = new List<string> { "Adam", "Bob", "Charlie" };
var people = from name in names
select new Person { Name = name, Age = 30 };
foreach (Person person in people)
{
Console.WriteLine(person.Name + ", " + person.Age);
}
这个例子从names
集合中选择每个字符串,并将它们投影到一个新的Person
类型中。Person
类型具有Name
和Age
属性,它们分别被设置为字符串值和整数值。然后使用foreach
循环将每个Person
实例的名称和年龄打印出来。
下面是一个从XML文档中选择数据的例子:
XDocument doc = XDocument.Load("books.xml");
var books = from book in doc.Descendants("book")
where (string) book.Element("genre") == "Computer"
select new {
Title = (string) book.Element("title"),
Author = (string) book.Element("author")
};
foreach (var book in books)
{
Console.WriteLine("{0} by {1}", book.Title, book.Author);
}
这个例子从名为books.xml
的XML文档中选择所有类型为“计算机”的书。然后使用select
子句将每本书的标题和作者投影到一个新的匿名类型中。最后,使用foreach
循环将每本书的标题和作者打印出来。
下面是一个修改XML文档的例子:
XDocument doc = XDocument.Load("books.xml");
var book = doc.Descendants("book")
.Where(b => (string) b.Attribute("id") == "bk101")
.Single();
book.Element("price").Value = "19.99";
doc.Save("books.xml");
这个例子从名为books.xml
的XML文档中选择一个特定的书(使用它的id
属性)。然后修改这本书的价格,最后将修改的XML文档保存回磁盘。
下面是一个从实体集合中筛选数据的例子:
using (var context = new MyDbContext())
{
var query = from p in context.Products
where p.Price > 100
select p;
foreach (var product in query)
{
Console.WriteLine(product.Name + " " + product.Price);
}
}
这个例子从Products
实体集合中选择价格大于100的所有产品,并打印出它们的名称和价格。
下面是一个使用LINQ联接多个实体集合的例子:
using (var context = new MyDbContext())
{
var query = from customer in context.Customers
join order in context.Orders
on customer.Id equals order.CustomerId
join product in context.Products
on order.ProductId equals product.Id
select new {
CustomerName = customer.Name,
OrderDate = order.Date,
ProductName = product.Name
};
foreach (var result in query)
{
Console.WriteLine("{0} bought {1} on {2}",
result.CustomerName,
result.ProductName,
result.OrderDate.ToShortDateString());
}
}
这个例子从Customers
、Orders
和Products
实体集合中联接三个表,并使用select
子句将结果投影到一个新的匿名类型中。最后,使用foreach
循环将每个结果打印出来。
以上是一些与LINQ相关的示例代码。这些示例覆盖了从基本查询到XML处理和实体框架的一些方面。加强对LINQ的理解,有助于您更清楚地了解如何使用它在代码中进行数据检索、过滤、转换和排序。