Linq无效的Cast异常相同的对象类型

时间:2014-02-17 06:27:35

标签: c#-4.0 linq-to-entities

我写了这个查询,随着我对业务规则的理解有所改进,我对其进行了修改。

在最近的迭代中,我正在测试是否确实有一些可以删除的冗余。让我首先给你查询然后错误。

public List<ExternalForums> GetAllExternalForums(int extforumBoardId)
{
    List<ExternalForums> xtrnlfrm = new List<ExternalForums>();

    var query = _forumExternalBoardsRepository.Table
        .Where(id => id.Id == extforumBoardId)
        .Select(ExtForum => ExtForum.ExternalForums);
    foreach (ExternalForums item in query)
    {
        xtrnlfrm.Add(new ExternalForums { Id = item.Id  , ForumName = item.ForumName, ForumUrl = item.ForumUrl });
    }

    return xtrnlfrm;
}

现在,如果不明显,则查询选择返回外部列表列表。然后我遍历所述列表并将项目添加到另一个ExternalForums对象列表中。这是我期望删除的冗余。

预编译器是gtg,所以我经历了一次,在重构之前,所有东西都是kosher,并且当我开始循环时遇到了一个奇怪的错误。

  

无法转换System.Collections.Generic.HashSet的对象   NamSpcA.NamSpcB.ExternalForums键入NamSpcA.NamSpcB.ExternalForums。

咦?它们是相同的对象类型。

所以我在投射我的选择的方式上做错了吗?

TIA

1 个答案:

答案 0 :(得分:1)

var query = _forumExternalBoardsRepository.Table
    .Where(id => id.Id == extforumBoardId)
    .Select(ExtForum => ExtForum.ExternalForums);

此查询返回IEnumerable<T>,其中TExtForum.ExternalForums属性的类型,我希望这是另一个集合,这次是ExternalForum。并且错误消息与之匹配,表示您拥有IEnumerable<HashSet<ExternalForums>>

如果您需要将该系列集合展平为ExternalForums使用SelectMany的一大集合:

var query = _forumExternalBoardsRepository.Table
    .Where(id => id.Id == extforumBoardId)
    .SelectMany(ExtForum => ExtForum.ExternalForums);