【发布时间】:2011-05-07 12:17:14
【问题描述】:
我正在构建一个存储库方法(实体框架),以接收由表单中的复选框提供的 id 集合作为 CMS 的一部分,并更新将主题与出版物相关联的查找表(实体集)。
我在存储库中有这个方法:
public void AttachToTopics(int pubId, IQueryable<int> topicsForAssociation, IQueryable<int> topicsSubset, int primaryTopicId)
{
// EVERYTHING IS FINE IF I INSERT A MANUAL COLLECTION OF int LIKE THIS:
// var priorAssociatedTopics = new[] { 2 }.AsQueryable(); //
// BUT WHAT I REALLY NEED TO WORK IS THIS:
IQueryable<int> priorAssociatedTopics = ListTopicIdsForPublication(pubId);
var priorAssociatedTopicsToExamine = priorAssociatedTopics.Intersect(topicsSubset);
var topicsToAdd =
associatedTopics.Intersect(topicsSubset).Except(priorAssociatedTopicsToExamine);
foreach (var topicToAdd in topicsToAdd)
AttachToTopic(pubId, topicToAdd);
foreach (var topicToRemove in priorAssociatedTopicsToExamine.Except(associatedTopics))
DetachFromTopic(pubId, topicToRemove);
}
AttachToTopics 在第一个 foreach 循环中阻塞,产生以下错误消息:
This method supports the LINQ to Entities infrastructure and is not intended to be used directly from your code.
但问题实际上出在第一行:在该行上调用的存储库方法将适当类型的集合提供到priorAssociatedTopics 中,并且 Intellisense 将其显式键入为 IQueryable 没有问题(通常,我会使用 var),并且调试器显示此变量包含整数集合。
public IQueryable<int> ListTopicIdsForPublication(int pubId)
{
var topics = from x in DataContext.TopicPublications where x.PublicationId == pubId select x;
return topics.Select(t => t.Id);
}
但是,回到 attachToTopics 中,我的 topicsToAdd 集合没有被填充,并且它在调试中的结果视图包含上述错误消息。
奇怪的是,如果我为priorAssociatedTopics 切换手动生成的IQueryable 整数集合(参见上面代码中的注释),foreach 循环可以正常工作。所以我相信我需要找到一些其他方法来从我的存储库中的方法调用中获取使用整数填充的priorAssociatedTopics。
有什么线索吗?
【问题讨论】:
标签: c# entity-framework iqueryable