Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#字典中获取特定值的列表_C#_Linq_Dictionary - Fatal编程技术网

从C#字典中获取特定值的列表

从C#字典中获取特定值的列表,c#,linq,dictionary,C#,Linq,Dictionary,假设我有一个C#字典,其中包含Enum值,如下所示: public enum TileType { Source, Horizontal, Vertical } Dictionary<Tile, TileType> tiles = new Dictionary<Tile, TileType>(); var filteredTiles = tiles.Where(x=>x.Value == TileType.Horizontal); 公共

假设我有一个C#字典,其中包含
Enum
值,如下所示:

public enum TileType
{
    Source,
    Horizontal,
    Vertical
}

Dictionary<Tile, TileType> tiles = new Dictionary<Tile, TileType>();
var filteredTiles = tiles.Where(x=>x.Value == TileType.Horizontal);
公共枚举TileType
{
来源
水平的
竖的
}
Dictionary tiles=新字典();
。。。稍后我想从dict中检索所有键值对,例如
value=TileType.Horizontal
,但不使用
foreach
循环

如何在没有循环的情况下检索它们?我毫不怀疑这是有可能的。有人能给我一个如何编写LINQ的提示吗?

试试这个:

var horizontals = tiles.Where(kvp => kvp.Value == TileType.Horizontal).ToList()
试试这个:

var horizontals = tiles.Where(kvp => kvp.Value == TileType.Horizontal).ToList()
使用以下命令:

tiles.Where(x => x.Value == TileType.Horizontal);
使用以下命令:

tiles.Where(x => x.Value == TileType.Horizontal);
它是这样的:

public enum TileType
{
    Source,
    Horizontal,
    Vertical
}

Dictionary<Tile, TileType> tiles = new Dictionary<Tile, TileType>();
var filteredTiles = tiles.Where(x=>x.Value == TileType.Horizontal);
它是这样的:

public enum TileType
{
    Source,
    Horizontal,
    Vertical
}

Dictionary<Tile, TileType> tiles = new Dictionary<Tile, TileType>();
var filteredTiles = tiles.Where(x=>x.Value == TileType.Horizontal);

我会这样写:

tiles.Where(t => t.value == TileType.Horizontal).ToArray();

我会这样写:

tiles.Where(t => t.value == TileType.Horizontal).ToArray();

谢谢正是我要找的@Baddingtoncat注意,这仍然在执行一个循环,只是它不在您的代码中…@AakashM-我认为这一定是这个问题中隐含的。没有其他方法可以获得这些值——即使你最终得到了机器代码。@zackery.fix——这个建议只是故事的一半。相反的问题也可能发生——如果您基于单个查询构建多个查询,然后尝试访问其中的每个查询,那么单个基础查询将运行多次。延迟执行可能会导致性能问题。@zackery.fix-更糟糕的是,如果继续构建EF查询,最终可能会导致单个C#查询拆分为多个数据库查询。如果调用
.ToList()
(或任何其他强制求值的运算符)太早或太迟,则需要仔细考虑何时调用。没有任何规则可以一直有效。谢谢!正是我要找的@Baddingtoncat注意,这仍然在执行一个循环,只是它不在您的代码中…@AakashM-我认为这一定是这个问题中隐含的。没有其他方法可以获得这些值——即使你最终得到了机器代码。@zackery.fix——这个建议只是故事的一半。相反的问题也可能发生——如果您基于单个查询构建多个查询,然后尝试访问其中的每个查询,那么单个基础查询将运行多次。延迟执行可能会导致性能问题。@zackery.fix-更糟糕的是,如果继续构建EF查询,最终可能会导致单个C#查询拆分为多个数据库查询。如果调用
.ToList()
(或任何其他强制求值的运算符)太早或太迟,则需要仔细考虑何时调用。没有一条规则可以一直有效。