gpt4 book ai didi

linq - LINQ 语句中的 Select 是可选的吗?

转载 作者:行者123 更新时间:2023-12-01 08:30:53 25 4
gpt4 key购买 nike

我正在查看一些 LINQ 示例,因此提醒他们应该在最后有一个“选择”子句。

但是我有一个正在运行的 LINQ,并且没有“选择”:

public IEnumerable<InventoryItem> Get(string ID, int packSize, int CountToFetch)
{
return inventoryItems
.Where(i => (i.Id.CompareTo(ID) == 0 && i.PackSize > packSize) || i.Id.CompareTo(ID) > 0)
.OrderBy(i => i.Id)
.ThenBy(i => i.PackSize)
.Take(CountToFetch)
.ToList();
}

这是因为:
(a) select is not really necessary?
(b) Take() is doing the "select"
(c) ToList() is doing the "select"

说实话,在我添加“ToList()”之前,这也是有效的……所以看起来 LINQ 在它允许人们逃脱的方面非常宽容/松懈。

此外,在我使用的 LINQ 中,我认为 OrderBy 和 ThenBy 是多余的,因为用于填充库存项的 SQL 查询已经有一个 ORDER BY ID、PackSize 子句。我说得对吗(.OrderBy() 和 .ThenBy() 是不必要的)?

最佳答案

Linq 语句实际上确实需要一个 select子句(或其他子句,例如 group by)。但是,您使用的不是 Linq 语法,而是 Linq Enumerable扩展方法,所有(大部分)返回 IEnumerable<T> .因此,他们不需要 Select运算符(operator)。

var result = from item in source
where item.Value > 5
select item;

完全一样
var result = source.Where(item => item.Value > 5);

为了完整性:
var result = from item in source
where item.Value > 5
select item.Value;

完全一样
var result = source.Where(item => item.Value > 5)
.Select(item => item.Value);

Linq 语句(Linq 语法语句)在末尾需要一个特殊的子句来表示查询的结果应该是什么。没有 select , group by , 或其他选择子句,语法不完整,编译器不知道如何将表达式更改为适当的扩展方法(这就是 Linq 语法实际被编译成的)。

至于 ToList是的,这是 Enumerable 之一不返回 IEnumerable<t> 的扩展方法,而是一个 List<T> .当您使用 ToListToArray Enumerable立即枚举并转换为列表或数组。如果您的查询很复杂并且您需要多次枚举结果而不多次运行查询,这将非常有用)。

关于linq - LINQ 语句中的 Select 是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20125824/

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