1

此问题与 LINQ-to-entity 相关。

我发布了一个类似的问题,但没有答案就让人困惑,所以我提供了一个例子和一个新的呼救声。

我有一个“颜色”类,ObservableCollection其中包含一个有两个成员的类,Index并且Name填充如下:

0 - 红色
1 - 蓝色
2 - 绿色

我有一个数据库表,其中包含我最喜欢的颜色的整数列表。我想根据存储在数据库中的索引值返回一个查询,其中包含我最喜欢的颜色的整数值和匹配的名称(由 observablecollection 返回)。

此语句单独工作正常并返回我的颜色名称:-

string ColorName = Colors.Names.Where(x => x.Index == 1).FirstOrDefault().Name;

但是当包含在 LINQ-to-entity 查询中时:-

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”,唉。

4

2 回答 2

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
             };
于 2013-03-07T14:15:31.990 回答
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 对象中返回结果。然后可以像使用任何其他对象一样使用该对象。

于 2013-03-07T14:16:56.027 回答