我写了这个查询,随着我对业务规则的理解有所改进,我对其进行了修改。
在最近的迭代中,我正在测试是否确实有一些可以删除的冗余。让我首先给你查询然后错误。
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
答案 0 :(得分:1)
var query = _forumExternalBoardsRepository.Table
.Where(id => id.Id == extforumBoardId)
.Select(ExtForum => ExtForum.ExternalForums);
此查询返回IEnumerable<T>
,其中T
是ExtForum.ExternalForums
属性的类型,我希望这是另一个集合,这次是ExternalForum
。并且错误消息与之匹配,表示您拥有IEnumerable<HashSet<ExternalForums>>
。
如果您需要将该系列集合展平为ExternalForums
使用SelectMany
的一大集合:
var query = _forumExternalBoardsRepository.Table
.Where(id => id.Id == extforumBoardId)
.SelectMany(ExtForum => ExtForum.ExternalForums);