从LINQ Query返回自定义列表类类型 - 返回相同的类型

时间:2010-07-06 03:58:08

标签: linq linq-to-objects

我有一个实现List(MyCustomClass)的自定义List(MyCustomList)。

我想针对它运行LINQ查询并返回过滤的MyCustomList。

    Public ReadOnly Property DebitTransactions As MyCustomList
        Get
            Return From item In Me Where item.IsDebit = True Select item
        End Get
    End Property

我在这里获得了一个类型转换,因为LinQ查询不会返回它正在过滤的同一个MyCustomList中的列表。它无法将WhereSelectListIterator对象(返回)转换为MyCustomClass。

我真的需要过滤后的结果与它们所用的格式相同。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果您实现自己的Where exthension方法,则可以继续使用linq语法。

public class MyCustomList : List<MyCustomClass>
{
    public MyCustomList() : base()
    {
    }
    public MyCustomList(IEnumerable<MyCustomClass> coll) : base(coll)
    {
    }
}

public static class MyCustomListExtensions
{
    public static MyCustomList Where(this MyCustomList myList, Func<MyCustomClass, bool> predicate)
    {
        return new MyCustomList(Enumerable.Where(myList, predicate));
    }
}

public class MyCustomClass
{
    public int Int1 { get; set; }
    public string Str1 { get; set; }
}

我在这里使用自定义Where实现:

        var myList = new MyCustomList()
                         {
                             new MyCustomClass() { Int1 = 1},
                             new MyCustomClass() { Int1 = 2},
                             new MyCustomClass() { Int1 = 3},
                         };

        MyCustomList filteredList = from item in myList where item.Int1 > 1 select item;

        Assert.AreEqual(2, filteredList.Count);

答案 1 :(得分:0)

您必须迭代列表,将它们添加到集合中,然后返回集合。 Linq不直接支持将迭代器转换为List,数组和Dictionaries之外的自定义返回类型。