C# Linq加入实体——我不&x27;我不想要匿名类型

C# Linq加入实体——我不&x27;我不想要匿名类型,c#,.net,linq,entity-framework,linq-to-entities,C#,.net,Linq,Entity Framework,Linq To Entities,我有两个通过映射表关联的表: 关键字 标题 我试图根据连接的结果返回一个Map\u关键字\u Title(映射表的对象)列表 在我用typedQuery添加最后一部分之前,它只是返回匿名类型的对象。我希望它返回类型为Map\u Keywords\u Title的项目,因此我尝试在末尾添加Select(也尝试了Cast,但失败了)。现在的问题是,生成的对象不是由实体框架管理的,因此我无法保存对它们的更改 在LINQtoEntities中是否没有直接的方法来实现这一点?我正在使用VS2008,所以我

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

  • 关键字
  • 标题
  • 我试图根据连接的结果返回一个
    Map\u关键字\u Title
    (映射表的对象)列表

    在我用
    typedQuery
    添加最后一部分之前,它只是返回匿名类型的对象。我希望它返回类型为
    Map\u Keywords\u Title
    的项目,因此我尝试在末尾添加Select(也尝试了Cast,但失败了)。现在的问题是,生成的对象不是由实体框架管理的,因此我无法保存对它们的更改

    在LINQtoEntities中是否没有直接的方法来实现这一点?我正在使用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();
        }
    
    public IList MatchingTitleKeywordMappings(字符串包含文本)
    {
    var关键字=QueryKeywords();
    如果(!string.IsNullOrEmpty(containedText))
    {
    表达式exprContainsKeyword=k=>containedText.Contains(k.WordText);
    关键词=关键词。其中(exprContainsKeyword);
    }
    var maps=QueryMap_关键字_Title();
    var anonQuery=keywords.Join(
    地图,
    key=>(int)key.Id,
    map=>(int)map.Keyword.Id,
    (键,地图)=>新建
    {
    地图Id,
    地图。关键字,
    地图。标题
    });
    var typedQuery=anonQuery.ToList().Select(anon=>newmap\u Keywords\u Title()
    {
    Id=非指定Id,
    关键字=anon.Keyword,
    Title=anon.Title
    });
    返回typedQuery.ToList();
    }
    
    好吧,我厌倦了评论

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

    这与您想要的接近吗?

    我认为您不需要第二个查询。你能把第一个查询中的“new{…”改为“new Map_Keywords_Title{…”吗?它不是这样的。它说“不能用集合初始值设定项初始化类型Map_Keywords_Title,因为它没有实现'System.Collections.IEnumerable'。即使这样,我想我仍然有创建“new Map”的问题"映射关键字而不是使用由EF管理的标题,否?这有帮助吗?抱歉,我没有一种简单的方法来测试代码。嗯……也许。我将不得不研究是否有一种方法可以对所有返回的项目而不是一个接一个地执行此操作。如果有端点,则不需要联接。联接应该是EF.Wh中的最后手段关键字和标题类中的关系端点在哪里?