我想将Linq查询传递给方法,如何指定参数类型?
我的链接查询类似于:
var query = from p in pointList where p.X < 100 select new {X = p.X, Y = p.Y}
显然我是Linq的新手,当我转换其余的代码时,最终可能会摆脱接收方法,但这似乎是我应该知道的......
谢谢
您需要为投影使用普通类型,或者将您传递给泛型的方法(这意味着您不能用它做多少).你究竟想做什么?如果需要使用方法中的X和Y值,则肯定需要创建普通类型.(有一种非常黑客的方法可以避免它,但它们并不是一个好主意.)
注意:目前正在谈论其他一些答案IQueryable
,但没有迹象表明你使用的是LINQ to Objects之外的任何内容,在这种情况下它将是一个IEnumerable
反而 - 但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(IEnumerablepoints) { ... }
并称之为 SomeMethod(query);