我的查询看起来像这样
return (from item in context.MERCHANDISE_ITEMS
where item.ORGID == orgId
select new MerchandiseModel()
{
Description = item.DESCRIPTION,
...,
Images = context.MERCHANDISE_IMAGES.Where(i => i.ITEMID == item.ID).ToDictionary(i => i.ID, i => i.IMAGENAME)
}).FirstOrDefault();
图片是字典,MERCHANDISE_IMAGES.ID是int,MERCHANDISE_IMAGES.IMAGENAME是字符串。
这是抛出System.NotSupportedException,我尝试过做linq(没有lambda),同样的异常。
以下是例外:
LINQ to Entities does not recognize the method
'System.Collections.Generic.Dictionary`2[System.Int32,System.String] ToDictionary[MERCHANDISE_IMAGES,Int32,String](System.Collections.Generic.IEnumerable`1[Hylton.Infrastructure.EntityFrameworkORM.MERCHANDISE_IMAGES],
System.Func`2[Hylton.Infrastructure.EntityFrameworkORM.MERCHANDISE_IMAGES,
System.Int32], System.Func`2[Hylton.Infrastructure.EntityFrameworkORM.MERCHANDISE_IMAGES,System.String])' method,
and this method cannot be translated into a store expression.
我不知道我做错了什么,我已经查看了这个问题的每一篇文章,我看到的一切都是以同样的方式做到的。任何人都可以指出我缺少的东西吗?
答案 0 :(得分:1)
简短版本:EF无法将ToDictionary转换为SQL。
根据我的经验,最好的方法是使用您需要的DBO中的所有内容简化Select to a anonymous类型,调用ToList(或其他强制评估的内容),然后执行ToDictionary和其他数据按摩。
这样做的另一个好处是强制它进行评估,你将避免让你的上下文使用并关闭它,这会在你尝试使用返回时导致错误。