我想将 Linq 查询传递给方法,如何指定参数类型?
我的链接查询看起来像这样:
var query =
from p in pointList
where p.X < 100
select new {X = p.X, Y = p.Y}
很明显,我是 Linq 的新手,当我转换其余代码时,最终可能会摆脱接收方法,但这似乎是我应该知道的...
谢谢
最佳答案
您需要为投影使用普通类型,或者将传递给它的方法也设为泛型(这意味着您不能用它做很多事情)。你到底想做什么?如果您需要使用该方法中的 X 和 Y 值,您肯定需要创建一个普通类型。 (有一些可怕的 hacky 方法可以避免它,但这不是一个好主意。)
注意:其他一些答案目前正在谈论IQueryable<T>
,但没有迹象表明您使用的不仅仅是 LINQ to Objects,在这种情况下它将是 IEnumerable<T>
。相反 - 但 T
当前是匿名类型。如果您想在每个项目中使用单独的值,那么这就是您需要处理的部分。如果您不使用 LINQ to Objects,请澄清问题,我将编辑此答案。
例如,以您当前的查询为例(该查询略有问题,因为您不能两次使用同名 X 的两个投影初始值设定项)。您将创建一个新类型,例如MyPoint
public sealed class MyPoint
{
private readonly int x;
private readonly int y;
public int X { get { return x; } }
public int Y { get { return y; } }
public MyPoint(int x, int y)
{
this.x = x;
this.y = y;
}
}
您的查询将是:
var query =
from p in pointList
where p.X < 100
select new MyPoint(p.X, p.Y);
然后您可以将您的方法编写为:
public void SomeMethod(IEnumerable<MyPoint> points)
{
...
}
并将其命名为SomeMethod(query);
关于c# - 如何将 Linq 查询传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693180/