2026-07-22 · C# 基础 · 阅读约 7 分钟

LINQ 查询语法与方法语法对照整理

LINQ 有两种写法:查询语法(像 SQL)和方法语法(链式调用)。刚学时两种写法混在一起容易乱,看别人项目里有时候用 from...where...select,有时候用 .Where().Select(),反应不过来。这篇笔记把常用操作符对照着整理一遍,方便以后查阅。

一、Where 过滤

// 查询语法
var q1 = from p in products
         where p.Price > 100
         select p;

// 方法语法
var q2 = products.Where(p => p.Price > 100);

二、Select 投影

// 查询语法
var q1 = from p in products
         select p.Name;

// 方法语法
var q2 = products.Select(p => p.Name);

三、OrderBy 排序

// 查询语法
var q1 = from p in products
         orderby p.Price descending, p.Name
         select p;

// 方法语法
var q2 = products
    .OrderByDescending(p => p.Price)
    .ThenBy(p => p.Name);

四、GroupBy 分组

// 查询语法
var q1 = from p in products
         group p by p.Category into g
         select new { Category = g.Key, Items = g };

// 方法语法
var q2 = products.GroupBy(p => p.Category);

五、Join 联表

var q1 = from p in products
         join c in categories on p.CategoryId equals c.Id
         select new { p.Name, CategoryName = c.Name };

var q2 = products.Join(
    categories,
    p => p.CategoryId,
    c => c.Id,
    (p, c) => new { p.Name, CategoryName = c.Name });

六、First / Single / Count

这几个常用方法只有方法语法:

var first   = products.First(p => p.Price > 0);
var single  = products.Single(p => p.Id == 1);
var count   = products.Count();
var max     = products.Max(p => p.Price);
var sum     = products.Sum(p => p.Price);

其中 First 和 Single 的区别要注意:First 找到第一个就返回,找不到会抛异常;Single 要求必须只有一个,多于一个也会抛异常。日常用 FirstOrDefault 更安全。

七、自己的使用习惯