我想将一个 Linq 查询传递给一个方法,如何指定参数类型?
我的Linq查询类似于:
var query =
from p in pointList
where p.X < 100
select new {X = p.X, Y = p.Y}
显然我对Linq很陌生,当我转换我的其余代码时,最终可能会摆脱接收方法,但这似乎是我应该了解的东西...
谢谢
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);
我认为你要找的是Expression类。例如,
public void DoSomething()
{
User user = GetUser(x => x.ID == 12);
}
IQueryable<User> UserCollection;
public User GetUser(Expression<Func<User,bool>> expression)
{
return UserCollection.expression;
}
public void DoSomething(IQueryable query) { ... }
public void DoSomething<T>(IQueryable<T> query) { ... }
如果你需要传递表达式,请参考以下内容:
public void DoSomething(Expression exp) { ... }
tvanfosson和Jon都是正确的,你可以编写一个接受 IEnumerable<T>
的函数(你可以将函数定义为泛型或者指定具体的泛型版本,后者更可能是正确的选项),因为LINQ to Objects生成的是 IEnumerable<T>
,而LINQ to SQL生成的是实现了 IEnumerable<T>
的 IQueryable<T>
。这个选项应该可以让你不用考虑数据源。
你也可以使用以下代码:
IEnumerable <TableName> result = from x in dataBase.TableName
select x;
methodName(result);
private void methodName (IEnumerable<TableName> result)
{
codes.....
}