【发布时间】:2015-08-07 14:30:33
【问题描述】:
这是我在使用 3 层结构的两个不同工作中看到的一个问题,但还没有找到干净的解决方法。我相信这也适用于使用 LINQ 语句。
我有 2 个类,一个是对象,另一个是这些对象的已定义集合,其中可能包含一些附加功能:
public class TestObject
{
public Int32 id {get; set;}
public string value {get; set;}
}
public class TestObjectCollection: List<TestObject>
{
public TestObject Get(Int32 id)
{
return this.FirstOrDefault(item => item.id==id);
}
}
假设我使用 lambda 表达式,例如:
List<TestObject> result = data.Where(item => item.id > 0).ToList();
有没有一种简单的方法可以将该对象列表转换为我定义的集合,而无需执行以下操作:
TestObjectCollection resultAsCollection = new TestObjectCollection()
resultAsCollection.AddRange(result);
似乎应该有一种方法可以将 Lambda 表达式返回的 GenericList 转换为我的 TestObjectCollection,而无需通过添加的步骤循环遍历返回的结果。
【问题讨论】:
-
我看不出使用
List<T>、EnhancedList<T>或AddRange(IEnumerable<T>)的问题。AddRange通常接受 IEnumerable,这意味着您可以直接传递 LINQ 查询。在 TestObjectCollection的实现中更有可能出现问题 -
您想用创建所需列表类型的不同扩展方法替换
.ToList()调用。 -
也许你应该为
DBSet或List写一个扩展方法。