本文演示如何使用查询和方法语法编写 LINQ 查询。除此之外,还强调了为什么在复杂查询的情况下,查询语法比方法语法更受欢迎。
在深入研究之前,让我们先了解一下 LINQ 的每种语法。
它是用于编写使用扩展方法和 lambda 表达式的查询的语法之一。
var query = items.Where(item => item.IsActive)
.Select(item => new { item.Name, item.Id });
随着查询在本质上变得更加复杂,语法不可读。
它是使用复杂筛选、分组和联接操作编写查询的第二种语法。
var query = from item in items
where item.IsActive
select new { item.Name, item.Id };
上述语法与SQL查询结构非常相似,这使得它更易于理解、可读和可维护。
考虑一个示例,其中我们需要联接两个集合,过滤它们并将它们映射到新类型中。让我们使用这两种语法来解决上述问题语句。
以下实现似乎更加密集和复杂。
var query = items.Join(otherCollection,
item => item.Key,
other => other.Key,
(item, other) => new { item.Name, other.Description })
.Where(x => x.Description.Contains("specific keyword"))
.Select(x => new { x.Name, x.Description });
使用查询语法重写相同的查询可使其更具可读性和可理解性。
var query = from item in items
join other in otherCollection on item.Key equals other.Key
where other.Description.Contains("specific keyword")
select new { item.Name, other.Description };
创建另一个名为的类,并添加以下代码片段QueryVsMethod
public static class QueryVsMethod
{
static List<Item> items = new List<Item>
{
new Item { Id = 1, Name = "Item1", IsActive = true },
new Item { Id = 2, Name = "Item2", IsActive = false },
new Item { Id = 3, Name = "Item3", IsActive = true }
};
public static void QuerySyntax()
{
// Method Syntax
var methodSyntaxQuery = items.Where(item => item.IsActive)
.Select(item => new { item.Name, item.Id });
Console.WriteLine("Method Syntax Results:");
foreach (var item in methodSyntaxQuery)
{
Console.WriteLine($"Name: {item.Name}, Id: {item.Id}");
}
}
public static void MethodSyntax()
{
// Query Syntax
var querySyntaxQuery = from item in items
where item.IsActive
select new { item.Name, item.Id };
Console.WriteLine("\nQuery Syntax Results:");
foreach (var item in querySyntaxQuery)
{
Console.WriteLine($"Name: {item.Name}, Id: {item.Id}");
}
}
}
并创建一个模型类,如下所示
class Item
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
}
#region Day 27: Query vs Method Syntax
static string ExecuteDay27()
{
QueryVsMethod.MethodSyntax();
QueryVsMethod.QuerySyntax();
return "Executed Day 27 successfully..!!";
}
#endregion
Query Syntax Results:
Name: Item1, Id: 1
Name: Item3, Id: 3
Method Syntax Results:
Name: Item1, Id: 1
Name: Item3, Id: 3
源代码获取:公众号回复消息【code:74360
】