gpt4 book ai didi

c# - 为什么我从类似的 Linq 查询中得到不同的输出?

转载 作者:行者123 更新时间:2023-11-30 23:04:38 25 4
gpt4 key购买 nike

我正在 LinqPad 5(特别是 5.26.01)中尝试以下代码

     IEnumerable<string> breeds = new List<string>{
"Fantail",
"Lahore",
"Bokhara Trumpeter",
"Rhine Ringbeater",
"Birmingham Roller",
"Pomeranian Pouter",
"Racing Homer",
"Archangel"};

IEnumerable<string> GetAllBreedsContainingLetter_Fluent(IEnumerable<string> breedlist, string letter)
{
return breedlist
.Where(breedname => breedname.Contains(letter.ToUpperInvariant()) || breedname.Contains(letter.ToLowerInvariant()))
.OrderByDescending(breedname => breedname)
.Select(breedname => breedname);
}

IEnumerable<string> GetAllBreedsContainingLetter_Query(IEnumerable<string> breedlist, string letter)
{
return breedlist = from b in breedlist
where (b.Contains(letter.ToUpperInvariant()) || b.Contains(letter.ToLowerInvariant()))
orderby b descending
select b;
}

var breedsFluent = GetAllBreedsContainingLetter_Fluent(breeds, "R");
breedsFluent.Dump();

var breedsQuery = GetAllBreedsContainingLetter_Query(breeds, "R");
breedsQuery.Dump();

我认为这两个函数应该是类似的,但我注意到 Linqpad 中的输出有些奇怪。第一个.Dump()被标识为 IEnumerable<String> ;第二个.Dump()标识为 IOrderedEnumerable<String> .

LinqPadOutput

这是关于我正在运行的查询还是 Linqpad 的产物?我还没有从谷歌搜索中找到任何东西。

最佳答案

在查询语法中,转换是这样的,当您有一个普通投影(将项目投影到自身)时,它生成一个 Select 调用,当该普通投影是 查询中的操作。由于您的查询包含其他操作,因此出于性能原因,Select 被完全省略。

将该查询语法查询正确转换为方法语法会跳过 Select。使用查询语法复制行为的方法需要类似第二个查询的方法来进行简单的投影。

关于c# - 为什么我从类似的 Linq 查询中得到不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49285868/

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