C# 在查询结果中包含来自联接的对象
设想一个简单的实体框架查询,其上下文由数据库生成,例如:C# 在查询结果中包含来自联接的对象,c#,entity-framework,join,C#,Entity Framework,Join,设想一个简单的实体框架查询,其上下文由数据库生成,例如: var q = from a in context.Accounts join c in context.Contracts on a.Id equals c.AccountId select new CustomAccount { Id = a.Id, Name = a.Name, ...
var q = from a in context.Accounts
join c in context.Contracts
on a.Id equals c.AccountId
select new CustomAccount {
Id = a.Id,
Name = a.Name,
...
Contracts = //How do I easily populate the related contracts?
};
该查询查找帐户并连接到合同。数据库中没有强制关系。我无法更改架构,因此无法使用导航属性。有没有一种简单的方法可以填充相关对象?我不确定是否理解正确,但您可以执行一个返回匿名类型对象的查询 编辑:您可以创建一个自定义类来保存结果的数据成员,并在linq结果中返回 编辑:按帐户名称使用分组,例如
var q = from a in context.Accounts
join c in context.Contracts
on a.Id equals c.AccountId
group a by new { a.Name } into g
select new AccountContracts
{
AccountName = g.Key.Id, // Account name
Contracts = g.SelectMany(x => x.Contracts)
};
只需使用GROUPBY子句。类似这样的未经测试:
var q = from a in context.Accounts
join c in context.Contracts on a.Id equals c.AccountId
group a by new { a.Id, a.Name, a.Etc } into g
select new CustomAccount
{
Id = g.Key.Id,
Name = g.Key.Name,
Etc = g.Key.Etc,
Contracts = g.SelectMany(x => x.Contracts)
};
这是真的,但那不是我想要做的。我无法让我的方法返回匿名列表。这是一对多关系。这家酒店的合同暗示了一份清单。谢谢你的努力,但这仍然没有让我明白我在追求什么。我需要的不仅仅是帐户中的一个值,而且使用一长串属性来分组@shuniar建议使用的属性似乎很难。我认为你需要更具体地回答你的问题,你的期望输出是什么……我很欣赏这个答案,虽然我还没有测试过它,分组和投影的所有列的列表有点难看,我将有很多列。