Linq to Entities Join - 我不想要匿名类型

时间:2010-03-17 00:43:20

标签: c# .net linq entity-framework linq-to-entities

我有两个通过映射表相关的表:

  1. keywords
  2. titles
  3. 我试图根据连接的结果返回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();
        }
    

1 个答案:

答案 0 :(得分:3)

好的,我厌倦了评论......

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

这是否与您想要的一致?