我有一个如下所示的数据库:
tbl_Seminar
ID
isActive
tbl_SeminarFees
ID
seminar_id -- foreign key
fee_text
我想获取所有事件的研讨会 (isActive ==1) 以及与该研讨会相关的费用列表。每个Seminar在tbl_SeminarFees中可能有n条记录是它的费用。我能够返回一个 linq 结构,它返回一个看起来像这样的对象列表 {seminar, SeminarFee}
但我想创建一个如下所示的嵌套结构:
{seminar, List<SeminarFee>}
我的 linq 查询应该是什么样的?
这是我目前的 linq:
var results = from s in context.Seminar
join p in context.SeminarFees on
s.ID equals p.SeminarID
where s.IsActive == 1
select new
{
Seminar = s,
Fees = p
};
如何更改它以获得这些列表:{seminar, List<SeminarFee>}
谢谢
更新
@lazyberezovsky 给了我一个使用组连接并进入另一个变量的好主意。但是我该如何循环遍历结果集。这是我现在拥有的:
foreach (var seminarAndItsFeesObject in results)
{
//do something with the seminar object
//do something with the list of fees
}
然而,这给了我以下错误:
Argument type 'SeminarFees' does not match the
corresponding member type
'System.Collections.Generic.IEnumerable`1[SeminarFees]'
我做错了什么?
谢谢
最佳答案
您可以使用 group join它根据键相等性(又名 join..into)对内部序列项目进行分组,以获得与研讨会相关的所有费用:
var results = from s in context.Seminar
join f in context.SeminarFees on
s.ID equals f.SeminarID into fees // here
where s.IsActive == 1
select new
{
Seminar = s,
Fees = fees
};
您不能在服务器端调用 ToList()
。但您可以稍后在客户端映射结果。
BTW 你可以定义navigation property Seminar
对象的费用
:
public virtual ICollection<SeminarFee> Fees { get; set; }
在这种情况下,您将能够加载收费的研讨会:
var results = context.Seminar.Include(s => s.Fees) // eager loading
.Where(s => s.IsActive == 1);
关于c# - 获取子记录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17137834/