📜  所有和任何 linq c# 示例替换 - C# (1)

📅  最后修改于: 2023-12-03 15:39:40.065000             🧑  作者: Mango

所有和任何 LINQ C# 示例

LINQ(语言集成查询)是.NET Framework 3.5引入的一项功能,它允许开发人员使用类似于SQL的语言(称为查询表达式)在.NET语言中查询数据。在本文中,我们将介绍一些与LINQ相关的示例代码。

LINQ to Objects
创建一个简单的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查询来过滤集合

下面是一个使用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类型具有NameAge属性,它们分别被设置为字符串值和整数值。然后使用foreach循环将每个Person实例的名称和年龄打印出来。

LINQ to XML
从XML文档选择数据

下面是一个从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文档

下面是一个修改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文档保存回磁盘。

LINQ to Entities
查询实体集合

下面是一个从实体集合中筛选数据的例子:

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());
    }
}

这个例子从CustomersOrdersProducts实体集合中联接三个表,并使用select子句将结果投影到一个新的匿名类型中。最后,使用foreach循环将每个结果打印出来。

总结

以上是一些与LINQ相关的示例代码。这些示例覆盖了从基本查询到XML处理和实体框架的一些方面。加强对LINQ的理解,有助于您更清楚地了解如何使用它在代码中进行数据检索、过滤、转换和排序。