【发布时间】:2021-09-07 14:43:04
【问题描述】:
我是一个相对较新的 C# 程序员,正在努力提高我的 LINQ 查询技能。我更喜欢对我的查询使用方法链接,但我很挣扎。是否可以将此 LINQ 重构为单个 lambda 表达式?这里的代码是一个简化的例子。我的目标是在一行中返回 Key=1 的值。我希望 LINQ 查询在单个 Lambda 表达式中搜索并返回 Key 1 的字符串值。谢谢!
using System;
using System.Collections.Generic;
using System.Linq;
namespace DictionaryPractice
{
class Program
{
static void Main(string[] args)
{
Dictionary<int, string> myd = new Dictionary<int, string>();
myd.Add(1, "one");
myd.Add(2, "two");
myd.Add(3, "three");
myd.Add(4, "four");
foreach (var i in myd)
Console.WriteLine(i.Value);
Console.WriteLine("");
var b = myd.Where(c => c.Key == 1).Select(c => c.Value).ToList();
Console.WriteLine($"Desired output: {b[0]}");
}
}
}
【问题讨论】:
-
预期的输出是included,但您也可以在此之前写入所有值。有什么问题?在写关于预期输出的问题时,您还必须说明与预期不符的实际输出。
-
你不应该首先使用 linq 来按键查询字典,它只是不适合这个特定工作的工具。字典已针对按键查询数据进行了优化。
-
我同意作为字典,在搜索具有特定键的项目时不需要linq,但出于学习目的,您可以这样做:
Console.WriteLine($"Desired output: {myd.FirstOrDefault(z => z.Key == 1)?.Value}"); -
好吧抱歉不清楚。我需要我的 LINQ 查询来返回一个字符串。这个例子是我真正工作的一个非常简化的例子。 LINQ 查询的目的是根据 Key 搜索 Dictionary 并将 Value 作为字符串返回。如果可能,我想将其重构为单个 lambda。
-
@PresadTelkikar 我看不出它有什么优雅之处,但如果你的意思是它更能表达意图,比是的,但它的性能也更差,linq-when-to-use-singleordefault-vs-firstordefault
标签: c# linq dictionary