2010-03-17 35 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