-1

我想调用Queryable.Where()并获取所有元素。Where()没有谓词函数,就没有这个版本。所以我必须纠正这个:

 var result = table.Where( x =>  true );

它有效,但对我来说感觉真的很愚蠢 -从未使用过,并且“箭头”符号x没有“转换” 。=>

有没有更优雅的解决方案?

4

5 回答 5

11

您可以使用以下更优雅的方法:

var result = table;

也可以result完全省略,table直接使用。

于 2012-06-06T14:01:33.967 回答
3

本质上不是table.Where(x=>true)noop吗?我的意思是,重点是什么?您可以使用_而不是x虽然,这是惯用的。

table.Where(_=> true);

但实际上,您正在执行以下操作:

for (var item in table)
{
    if (true) // your Where() clause..
    {
        yield item;
    }
}

看看它真的没有意义吗?

于 2012-06-06T13:57:41.613 回答
3

table.Where( x => true )不是“返回所有元素”。它只是返回一个可枚举,该可枚举具有足够的信息,可以在枚举时返回元素的某个子集。在您枚举它之前,不会“返回”任何元素。

而且由于这个子集在这种情况下甚至不合适(即返回所有元素),这本质上是一个空操作。

要枚举所有元素,请编写一个简单的foreach, 或使用ToListor ToArrayor 如果您不关心实际返回任何元素(并且只想枚举,大概是为了副作用):table.All(x => true)or table.Any(x => false),甚至只是table.Count().

于 2012-06-06T14:02:33.917 回答
1

In this case you would not need to call Where because you are not filtering the Queryable.

If you still wish to call Where and you do this in many places you could define a static Func and reuse that:

    public static Func<int, bool> t = ReturnTrue;

    public static bool ReturnTrue(int i) 
    {
        return true;
    }

    table.Where(t);
于 2012-06-06T14:14:53.703 回答
0

如果您尝试获取内容的副本table而不是参考,

var result = table.ToList();

但目前尚不清楚这是否真的是你想要完成的。细节?

于 2012-06-06T14:02:30.957 回答