LINQ to对象转换查询结果

时间:2009-07-15 15:28:08

标签: .net linq

我有一个类用户,我也为同一个用户类 - 用户实现了一个集合。用户将存储用户对象。 users集合类实现泛型集合类 - 集合。

我想将LINQ查询结果转换为我的集合类的对象 - 用户。每次我尝试显式转换时,它都会给我一个不能类运行时异常。

我试图在我的用户集合类中实现iEnumerable接口,但仍然无法转换查询结果。

现在我必须在查询结果集中执行for循环,并填写我自己的自定义集合 - 用户。

请帮助我解决这个问题。 Sanjay Sachdev

3 个答案:

答案 0 :(得分:2)

为什么不在Collection类中创建一个构造函数,该构造函数将IEnumerable作为参数并为您封装循环?在控制台应用程序中试试看看我的建议 - 在你的情况下,你会做一个集合 - 我只是使用int来轻松创建一个例子......

class Program
{
    static void Main(string[] args)
    {
        MyCollection myCollection = new MyCollection(Enumerable.Range(1, 10));

        foreach (var item in myCollection)
        {
            Console.WriteLine(item);
        }
    }
}

public class MyCollection : Collection<int>
{
    public MyCollection(IEnumerable<int> input)
    {
        foreach (var item in input)
        {
            this.Add(item);
        }
    }
}

您还可以创建一个扩展方法,以便于使用...

public static class MyCollectionHelper
{
    public static MyCollection ToMyCollection(this IEnumerable<int> input)
    {
        return new MyCollection(input);
    }
}

然后你会这样称呼它......

MyCollection myCollection = Enumerable.Range(1,10).ToMyCollection();

答案 1 :(得分:1)

问题不是100%清楚您需要的,但是您是否尝试过Cast扩展方法?

答案 2 :(得分:0)

即使它们都实现了相同的接口,也无法将对象转换为非对象。

例如,您无法将int数组投射到List<int>事件中,尽管它们都实现了IEnumerable<int>。您可以将其中任何一个强制转换为接口,但这不会更改对象的实际类型。该数组仍然是一个数组,它不能是一个列表。

因此,您必须遍历结果并将每个项目放入集合中。

当它是LINQ查询的结果时,还有另一个原因需要循环遍历结果。查询返回的内容不是具有完成结果的集合,而是在循环时创建结果的对象。因此,在循环之前,结果甚至不存在。