Lambda表达式可以获取Dictionary中的所有值

时间:2009-08-18 14:42:30

标签: c# linq lambda

我有一个LINQ查询,它返回Dictionary中的所有值,条件是:

var apps =
from entry in shape.Decorators
where entry.Value == DecoratorLayoutStyle.App
select entry.Key;

shape.Decorators是

Dictionary<Shape, DecoratorLayoutStyle>

是否有更简洁的东西,和/或我可以使用lambdas或其他东西的组合?

5 个答案:

答案 0 :(得分:6)

var apps = shape.Decorators
                .Where(x=>x.Value == DecoratorLayoutStyle.App)
                .Select(x=>x.Key);

我认为你的一切都很好。

答案 1 :(得分:3)

对我来说这看起来很简洁,我想你可以使用扩展函数而不是from / select linq语法,但这不会太差异。

更为棘手的是,我不确定你 想要 terser。目前的格式非常易读,并且清楚地记录了您正在尝试做的事情。

答案 2 :(得分:2)

var apps = shape.Decorators
                     .Where(e => e.Value ==  DecoratorLayoutStyle.App)
                     .Select(e => e.Key);

你认为这是更为严厉吗?

我个人更喜欢查询语法,当我有多个LINQ运算符时,我使用的所有运算符都可以转换为它。

答案 3 :(得分:1)

var apps = Shape.Decorators.Where(x => x.Value == DecoratorLayoutStyle.App)
                           .Select(x => x.Key);

答案 4 :(得分:0)

只是为了与众不同。

var apps = shape.Decorators.Keys
  .Where(k => shape.Decorators[k] == DecoratorLayoutStyle.App);