我有一个实现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。
我真的需要过滤后的结果与它们所用的格式相同。有什么建议吗?
答案 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之外的自定义返回类型。