1

この問題は、LINQ-to-entity に関連しています。

私は同様の質問を投稿しましたが、答えがなくて混乱したので、例と助けを求める新しい叫びを提供しています.

ObservableCollection私は2つのメンバーを持つクラス「Colors」を持って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
    });

このエラーが発生します:

タイプ「何とか」の定数値を作成できません。このコンテキストでは、プリミティブ型 (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
})

ここでの考え方は、toの呼び出しがToListデータベースにヒットし、結果をCLRオブジェクトに返すというものです。そのオブジェクトは、他のオブジェクトと同じように使用できます。

于 2013-03-07T14:16:56.027 に答える