Возврат пользовательского типа класса списка из LINQ Query - возврат того же типа, который идет, который выходит - PullRequest
0 голосов
/ 06 июля 2010

У меня есть собственный список (MyCustomList), который реализует список (из MyCustomClass).

Я хочу выполнить запрос LINQ для этого и вернуть отфильтрованный список MyCustomList.

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

Iполучите преобразование типа здесь, потому что запрос LinQ не возвращает список в том же MyCustomList, который он фильтровал.Он не может преобразовать объект WhereSelectListIterator (который возвращается) в MyCustomClass.

Мне действительно нужно, чтобы отфильтрованные результаты были в том же формате, в котором они пришли.Есть предложения?

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Если вы реализуете свой собственный метод 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);
0 голосов
/ 06 июля 2010

Вы должны перебрать список, добавить их в коллекцию и вернуть коллекцию.Linq напрямую не поддерживает преобразование итераторов в пользовательские типы возвращаемых данных, кроме List, массивов и словарей.

...