gpt4 book ai didi

c# - LINQ 中的查询比 SQL 更复杂

转载 作者:太空狗 更新时间:2023-10-30 01:19:24 25 4
gpt4 key购买 nike

我是 LINQ 查询的新手。我已经阅读/研究了 LINQ 查询相对于 SQL 的所有优点,但我有一个基本问题,为什么我们需要使用这些查询,因为我觉得它们的语法比传统的 sql 查询更复杂?

例如,查看下面的简单左外连接示例

    var q=(from pd in dataContext.tblProducts 
join od in dataContext.tblOrders on pd.ProductID equals od.ProductID into t
from rt in t.DefaultIfEmpty()
orderby pd.ProductID
select new
{
//To handle null values do type casting as int?(NULL int)
//since OrderID is defined NOT NULL in tblOrders
OrderID=(int?)rt.OrderID,
pd.ProductID,
pd.Name,
pd.UnitPrice,
//no need to check for null since it is defined NULL in database
rt.Quantity,
rt.Price,
})
.ToList();

最佳答案

因此,LINQ(语言集成查询)的要点是提供在执行内存中处理可枚举集合的简单方法。对比 SQL,它是一种用于确定用户从数据库中的一组数据中获取什么的语言。

由于类似 SQL 的语法,很容易将 LINQ 代码与 SQL 混淆,并认为它们“相似”——但实际上并非如此。 SQL 从超集中获取数据的子集; LINQ 是“语法糖”,它隐藏了涉及 foreach 循环的常见操作。

例如,这是一个常见的编程模式:

foreach(Thing thing in things)
{
if(thing.SomeProperty() == "Some Value")
return true;
}

...这在 LINQ 中很容易完成:

return things.Any(t => t.SomeProperty() == "Some Value");

这两个代码在功能上是相同的,我很确定甚至可以编译成大致相同的 IL 代码。不同之处在于它看起来如何。

您不必使用 LINQ;您可以选择使用标准的 foreach,有时,例如复杂的循环,这样做很有用。最终这是一个可读性问题——我的反问是,你的 foreach 循环的 LINQ 版本比原始的 foreach 循环更具可读性还是更差?

如果答案是“less”,那么我建议将其转换回 foreach

关于c# - LINQ 中的查询比 SQL 更复杂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23012995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com