2

我有一个模型版本。这包含信息以包含文档的一个唯一版本。

在我的视图模型中,我这样设置:

public virtual ICollection<IPACS_Version> rejectionList { get; set; }

所以我现在可以拥有一个版本文档的集合。

这是LINQ:

model.rejectionList = (from v in db.IPACS_Version
                        join d in db.IPACS_Document
                        on v.documentID equals d.documentID
                        where v.dateRejected != null && (d.createdBy == currUser || d.requester == currUser)
                        select v);

这给了我以下错误:

无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.ICollection”。存在显式转换(您是否缺少演员表?)

该行可以返回给我 0 到许多“版本”。所以我认为我没有正确理解的是这个 LINQ 查询为什么不能适合我的版本模型,因为查询返回 0 到许多版本?

4

3 回答 3

2

LINQ 查询返回IQueryable<T>,而您要求它是类型ICollection<T>。这两个界面非常不同,您需要将它们归为一种性质。从技术上讲,您需要具体IQueryable<T>化为某种内存中的数据序列,这将允许添加和删除它的成员(ICollection 接口抽象的性质)

快速解决方案是ToList在查询末尾添加

model.rejectionList = (from v in db.IPACS_Version
                        join d in db.IPACS_Document
                        on v.documentID equals d.documentID
                        where v.dateRejected != null && (d.createdBy == currUser || d.requester == currUser)
                        select v).ToList();

由于IList实现ICollection<T>了,这应该可以正常工作。

于 2013-09-10T20:27:55.473 回答
1

将您的财产定义为IEnumerable<T>

public virtual IEnumerable<IPACS_Version> rejectionList { get; set; }
于 2013-09-10T20:27:32.853 回答
1

如果您无法将视图模型更改为使用IEnummerable<T>而不是ICollection<T>,那么解决问题的最简单方法是调用ToList最终查询。List<T>实现ICollection<T>

于 2013-09-10T20:27:46.753 回答