C# 将多表LINQ查询作为一个对象返回

C# 将多表LINQ查询作为一个对象返回,c#,linq,entity-framework,repository,relational-database,C#,Linq,Entity Framework,Repository,Relational Database,因此,对于我当前的应用程序,我需要使用返回单个对象的存储库来查询数据库。问题是信息被分为两个不同的表。我试图获取的对象是规则对象。规则类由以下数据库实体组成: class Rule { STRATRULEDEF ruleDefinition { get; set; } List<STRATCODE> ruleCodeList { get; set; } 所以我有两个问题 1) 如何将ruleQuery作为“Rule”对象返回,如果将“var”

因此,对于我当前的应用程序,我需要使用返回单个对象的存储库来查询数据库。问题是信息被分为两个不同的表。我试图获取的对象是规则对象。规则类由以下数据库实体组成:

class Rule
    {
        STRATRULEDEF ruleDefinition { get; set; }
        List<STRATCODE> ruleCodeList { get; set; }
所以我有两个问题

1) 如何将ruleQuery作为“Rule”对象返回,如果将“var”更改为Rule,则会出现以下错误:

错误10无法将类型“System.Linq.IQueryable”隐式转换为“TestRules.Rule”。存在显式转换(是否缺少强制转换?)

我可以将System.Linq.IQueryable转换为TestRules.Rule吗

2) 我的表具有一对多关系,因此查询应该返回一条ruleDef记录和多条ruleCode记录,但是目前我得到了多条相互重复的ruleDef记录。有什么想法吗

谢谢


Steve

您必须初始化
规则
对象,如果需要单个对象,可以使用
FirstOrDefault

IEnumerable<Rule> rules = from ruleDefinition in AREContext.STRATRULEDEFs
                          from ruleCodes in AREContext.STRATCODES
                          where ruleDefinition.STRATRULEKEY == ruleKey 
                             && ruleCodes.STRATRULEKEY == ruleKey
                          select new Rule
                          { 
                              ruleDefinition = ruleDefinition, 
                              ruleCodeList = ruleCodes.ToList()
                          };
Rule firstRule = rules.FirstOrDefault();  // can be null if rules is empty
IEnumerable rules=来自AREContext.STRATRULEDEFs中的规则定义
来自AREContext.STRATCODES中的规则代码
其中ruleDefinition.STRATRULEKEY==ruleKey
&&ruleCodes.STRATRULEKEY==ruleKey
选择新规则
{ 
规则定义=规则定义,
ruleCodeList=ruleCodes.ToList()
};
Rule firstRule=rules.FirstOrDefault();//如果规则为空,则可以为null

因为您标记了EntityFramework,所以这里有另一个按层次加载数据的选项

假设您在这两者之间有导航属性,例如ruleDefinition上的外键指向一组规则代码,您应该能够执行以下操作

AREContext.STRATRULEDEFs.Include(s => s.STRATCodes).ToList;
这将向您返回STRATRULEDEFs对象的列表,每个对象都具有加载的STRATCODES集合的属性。从这里,映射到替代类可以通过手动或使用映射插件来实现

请注意,Include是一个扩展方法,因此请确保将以下内容添加到您的文件中

using System.Data.Entity;

尝试您的方法时,我遇到了类似的错误10无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换(是否缺少转换?)我不熟悉实体框架。尝试将
AsEnumerable()
添加到前两行,以强制使用LINQ to对象运行。
using System.Data.Entity;