drymonfidelia
V2EX  ›  程序员

C#的 LINQ 查询是不是所有编程语言中最优雅的?为什么其它编程语言不学习?写起来太爽了

By drymonfidelia at 1 天前 · 1720 次点击
16 条回复    2026-03-12 21:27:42 +08:00
chingyat
   1
chingyat  
   1 天前
虽然语法很优雅,但毕竟是一种 DSL 。
Rust 的 Sqlx 更优雅吧,直接写 SQL ,支持编译时验证。
drymonfidelia
   2
drymonfidelia  
OP
   1 天前
@chingyat LINQ 编辑时就能验证和自动补全,直接写 SQL 复杂的查询逻辑很容易写错
ratazzi
   3
ratazzi  
   1 天前
你去看看 Rails
levelworm
   4
levelworm  
   1 天前
这玩意能直接进入 Databricks 数据库查询吗?能的话倒是有点实用价值。实在是不习惯 PySpark 的一个个函数调用的写法,但是又不喜欢纯 SQL 。。。

https://www.cdata.com/kb/tech/databricks-ado-linqtoef.rst

好像还真可以。
liuliuliuliu
   5
liuliuliuliu  
PRO
   1 天前
```
因为 LINQ 不仅是语言特性,还需要库的支持,它要求:

语言支持扩展方法
语言支持将 lambda 表达式编译到 AST
库层面提供 AST 抽象
语言支持反射,且泛型保留类型信息到运行时(具现化泛型)
语言支持 generator (yield)

```

```
因为非常非常难……
C# 3.0 可以说是 C#历史上最大的一次改动,从语言到库的层面可以说是做了革命性的变化,单单是上下文关键字,就一次性新增了 from 、where 、select 、group 、by 、join 、equals 、on 、let 、order 、into 、asscending 、descending 一大堆,加上原有的 in 啥的。这特么就是重新设计了一个新的语言。
而 C#为了支持 LINQ Expression ,从语言到库都是进行了一系列的改造:

```
来自
https://www.zhihu.com/question/447572572
iorilu
   6
iorilu  
   1 天前
现在都 AI 了,我看现在很多程序都用原生 SQL 了,反正都是 AI 写。
GiantHard
   7
GiantHard  
   1 天前
F# 还提供了一个更加进化的版本 Computation Expression ,允许自定义关键字
metalvest
   8
metalvest  
   1 天前
爽就对了,要不然为什么叫语法糖呢,语法糖都爽
msg7086
   10
msg7086  
   22 小时 52 分钟前
如果你说的是链式函数表达从集合里取数据,那别的语言早就有了。
如果你说的是 from select 的话,那确实主要就 C#有,毕竟要对语言结构做大改,而且写起来也没很大的区别,我直接写链式函数表达不行吗。收益太小了,C#频繁对接数据库所以用途还大点,别的语言没有那么紧密的绑定,又或者是没有足够的财力去支撑这么大的改动。
alwaysol
   11
alwaysol  
   20 小时 3 分钟前
确实好用,所以我写 js 时也调用 linqjs 库来处理数据
runliuv
   12
runliuv  
   18 小时 39 分钟前
在 LINQ 上,只有 C# 和其它。 其它语言没这个机遇。
exonuclease
   13
exonuclease  
   13 小时 44 分钟前
其实平时也没人用查询语法 我们都写链式调用
exonuclease
   14
exonuclease  
   13 小时 43 分钟前
而且用不好的话会有性能问题 hotpath 还真不怎么敢写
drymonfidelia
   15
drymonfidelia  
OP
   8 小时 5 分钟前
@exonuclease hotpath 可以用 zlinq ,零分配的可以避免 GC
drymonfidelia
   16
drymonfidelia  
OP
   7 小时 20 分钟前
@msg7086 即使是链式函数,C#写起来也是最爽的,其它语言不是不能自动补全就是跑起来才能发现写错,例如 sqlalchemy 我查询条件写的乱七八糟也能运行,运行的时候才报错 (很久没用了,不知道是不是这个)
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 156ms · 3.9.8.5