此问题与LINQ-to-entity有关。
我发布了一个similar question,但是如果没有答案就会让人感到困惑,所以我提供了一个示例和一个新的帮助。
我有一个包含ObservableCollection
的“颜色”类,其中包含两个成员Index
和Name
,其填充方式如下:
0 - 红色
1 - 蓝色
2 - 绿色
我有一个数据库表,其中包含我喜欢的颜色的整数列表。我想根据存储在数据库中的索引值返回一个查询,其中包含我喜欢的颜色的整数值以及匹配的名称(由observablecollection返回)。
这个单独的语句工作正常并返回我的颜色名称: -
string ColorName = Colors.Names.Where(x => x.Index == 1).FirstOrDefault().Name;
但是当包含在LINQ到实体查询中时: -
var query = from c in context.FavoriteColor
select (new Item
{
Id = c.Id,
ColorName = Colors.Names.Where(x => x.Index == c.ColorIndex).FirstOrDefault().Name
});
我收到此错误:
无法创建“blah blah”类型的常量值。只有原始 这里支持类型(例如Int32,String和Guid') 上下文。
据我所知,也许该对象是在LINQ语句中返回的,但我想通过在末尾指定.Name表示法,这是一个字符串成员,它会使用它并将其分配给“ColorName”,唉不行。
答案 0 :(得分:0)
你试过了吗?
var query = from c in context.FavoriteColor
select new { c.Id, c.ColorIndex };
var result = from c in query.ToList()
select new Item
{
Id = c.Id,
ColorName = Colors.Names.Where(x => x.Index == c.ColorIndex).FirstOrDefault().Name
};
答案 1 :(得分:0)
您正在尝试在数据库查询中使用CLR对象。 LINQ-to-Entities说你做不到。查询完成后获取颜色名称。
var dbItems = context.FavoriteColor.Select(c => new {
c.Id,
c.ColorIndex
).ToList();
var items = dbItems.Select(item => new Item {
Id = item.Id,
ColorName = Colors.Names.Where(x => x.Index == item.ColorIndex).First().Name
})
这里的想法是对ToList
的调用命中数据库并在CLR对象中返回结果。然后可以像使用任何其他对象一样使用该对象。