2013-03-07 17 views
1

此問題與LINQ到實體有關。在實體LINQ語句內加入集合

我發佈了一個similar question但它沒有答案就讓人困惑,所以我提供了一個示例和一個新的求助呼籲。

我有一個類 「顏色」 含有ObservableCollection,其具有兩個部件,IndexName和填充等:

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

請包含「blah blah blah」我只能假設它是「ObservableCollection 」以及只在編譯器中說的。 – Aron 2013-03-07 14:11:45

+0

阿隆 - 這是observablecollection中包含的類型。謝謝 – xnetdude 2013-03-07 14:14:29

+0

EF無法將Color連續化到SQL中。你需要在.net中查詢,而不是在SQL中。 – Aron 2013-03-07 14:16:35

回答

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 
      }; 
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對象的結果。該對象可以像其他任何對象一樣使用。

+0

是LINQ實體的新手我希望我可以加入這些不同的數據源,但它似乎不是!感謝您的幫助,請試試看。 – xnetdude 2013-03-07 14:22:00

+0

我得到了與你的第二個linq語句相同的問題,所以我想我會從我的查詢中創建一個新的集合,並迭代它以更新顏色的文本值,除非有更有效的方法。 – xnetdude 2013-03-07 14:29:30

+0

@xnetdude - 究竟是什麼問題?拋出什麼異常? – ken 2013-03-07 17:35:25