2010-03-17 63 views
1

我有兩個,它們通過映射表相關的表:LINQ到實體加入 - 我不想匿名類型

  1. keywords
  2. titles

我試圖返回基於連接結果的Map_Keywords_Title(映射表的對象)列表。

直到我添加了最後一部分typedQuery它只是返回匿名類型的對象。我希望它返回Map_Keywords_Title類型的項目,所以我試着在最後添加Select(也試過Cast但失敗了)。現在的問題是結果對象不是由實體框架管理的,所以我不能保存對它們的更改。

Linq to Entities中沒有直接的方法嗎?我使用VS2008,所以我還沒有新的EF。

public IList<Map_Keywords_Title> MatchingTitleKeywordMappings(string containedInText) 
    { 
     var keywords = QueryKeywords(); 
     if (!string.IsNullOrEmpty(containedInText)) 
     { 
      Expression<Func<Keyword, bool>> exprContainsKeyword = k => containedInText.Contains(k.WordText); 
      keywords = keywords.Where(exprContainsKeyword); 
     } 
     var maps = QueryMap_Keywords_Title(); 
     var anonQuery = keywords.Join(
      maps, 
      key => (int)key.Id, 
      map => (int)map.Keyword.Id, 
      (key, map) => new 
      { 
       map.Id, 
       map.Keyword, 
       map.Title 
      }); 
     var typedQuery = anonQuery.ToList().Select(anon => new Map_Keywords_Title() 
      { 
       Id = anon.Id, 
       Keyword=anon.Keyword, 
       Title=anon.Title 
      }); 

     return typedQuery.ToList(); 
    } 
+0

我不相信你需要第二個查詢。你可以改變你的第一個查詢中的「新{...」到「新的Map_Keywords_Title {...」? – kervin 2010-03-17 01:32:30

+0

它不喜歡那樣。它說:「不能初始化類型Map_Keywords_Title集合初始值設定項,因爲它沒有實現'System.Collections.IEnumerable'。 即使這樣,我仍然有創建一個」新「Map_Keywords_Title而不是使用一個管理的問題通過EF,沒有? – Vince 2010-03-17 01:40:36

+0

這有幫助嗎?http://msdn.microsoft.com/en-us/library/bb896271.aspx?對不起,我沒有一個簡單的方法來測試代碼。 – kervin 2010-03-17 01:50:43

回答

3

好吧,我厭倦了評論...

using(someContext sc = new someContext()) 
{ 
    sc.Map_Keywords_Title.Include("Title") 
       .Include("Keyword") 
       .Where(mkt => containedInText.Contains(mkt.Keyword.WordText)); 
} 

那是任何接近你想要什麼?

+0

傑出。謝謝,完美地工作。 – Vince 2010-03-17 11:26:52

+0

完全沒問題。 – kervin 2010-03-17 15:57:27