将对象列表转换为另一个对象

时间:2015-06-18 09:53:11

标签: c# linq casting lambda dao

我有以下类(实体):实体(基类,有3个道具)&类别(来自实体并添加一些其他道具)

当我从数据库中读取数据时出现问题(填充方法返回实体列表),并且编译器不允许我从实体转换为类别。

有问题的代码:

var categories = (Category)categoryDao.Read();

我可以用一种非常不同的方式完成这个过程:

var categories = new List<Category>();
foreach (var item in categoryDao.Read())
{
    categories.Add((Category)item);
}

但它可能是坏事和不必要的。所以,问题是,我可以使用LINQ + LAMBDA以更简单的方式执行此操作,还是有其他技巧?

1 个答案:

答案 0 :(得分:2)

Read()的返回类型可能类似于IEnumerable<Entity>List<Entity>。这就是为什么你不能将它们投射到一个Category

如果您需要单行解决方案,可以尝试

var categories = categoryDao.Read().OfType<Category>();

或(感谢@Binkan Salaryman)

var categories = categoryDao.Read().Cast<Category>();

(前者只返回Category类型的元素 - 如果有些元素无法转换为Category,后者将抛出异常