当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将Linq查询传递给方法?》经验,为你挑选了1个好方法。

我想将Linq查询传递给方法,如何指定参数类型?

我的链接查询类似于:

var query =
    from p in pointList
    where p.X < 100
    select new {X = p.X, Y = p.Y}

显然我是Linq的新手,当我转换其余的代码时,最终可能会摆脱接收方法,但这似乎是我应该知道的......

谢谢



1> Jon Skeet..:

您需要为投影使用普通类型,或者将您传递给泛型的方法(这意味着您不能用它做多少).你究竟想做什么?如果需要使用方法中的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(IEnumerable points)
{
    ...
}

并称之为 SomeMethod(query);


@Samuel:很多人看到"LINQ"并立即想到"LINQ to SQL"(或实体框架等).就个人而言,我发现LINQ to Objects对于日常工作更有用:)
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有