我想将Linq查询传递给方法,如何指定参数类型?
我的链接查询类似于:
var query =
from p in pointList
where p.X < 100
select new {X = p.X, Y = p.Y}
Run Code Online (Sandbox Code Playgroud)
显然我是Linq的新手,当我转换其余的代码时,最终可能会摆脱接收方法,但这似乎是我应该知道的......
谢谢
Jon*_*eet 21
您需要为投影使用普通类型,或者将您传递给泛型的方法(这意味着您不能用它做多少).你究竟想做什么?如果需要使用方法中的X和Y值,则肯定需要创建普通类型.(有一种非常黑客的方法可以避免它,但它们并不是一个好主意.)
注意:目前正在谈论其他一些答案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;
}
}
Run Code Online (Sandbox Code Playgroud)
您的查询将是:
var query =
from p in pointList
where p.X < 100
select new MyPoint(p.X, p.Y);
Run Code Online (Sandbox Code Playgroud)
然后你将你的方法编写为:
public void SomeMethod(IEnumerable<MyPoint> points)
{
...
}
Run Code Online (Sandbox Code Playgroud)
并称之为 SomeMethod(query);
| 归档时间: |
|
| 查看次数: |
21379 次 |
| 最近记录: |