c# - 如何将 Linq 查询传递给方法?

标签 c# .net linq

我想将 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/

相关文章:

c# - 由于 Intellisense 错误而无法发布

c# - 从扫描仪获取图像 C#

C# - 无法在 LINQ to Entities 查询中构造实体或复杂类型

c# - LINQ 按不同输出分组

.net - WPF中的水平MenuItem

c# - 是否可以在创建单例时调用初始化方法?

c# - 如何使异步回调在不同的线程池中处理?

c# - 最佳年龄算法?

c# - '查询结果不能多​​次列举'

c# - 如何在 lambda 中使用 async/await