C# 获取子记录列表
我有一个如下所示的数据库:C# 获取子记录列表,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有一个如下所示的数据库: tbl_Seminar ID isActive tbl_SeminarFees ID seminar_id -- foreign key fee_text {seminar, List<SeminarFee>} 我想获得所有活跃的研讨会(isActive==1)以及与该研讨会相关的费用列表。每个研讨会可能有n个tbl_SeminarFees记录,即其费用。我能够返回一个linq结构,该结构向我返回一个对象列表,这些对象
tbl_Seminar
ID
isActive
tbl_SeminarFees
ID
seminar_id -- foreign key
fee_text
{seminar, List<SeminarFee>}
我想获得所有活跃的研讨会(isActive==1)以及与该研讨会相关的费用列表。每个研讨会可能有n个tbl_SeminarFees记录,即其费用。我能够返回一个linq结构,该结构向我返回一个对象列表,这些对象看起来像{SeminarFee}
,但我想创建一个嵌套结构,看起来像这样:
tbl_Seminar
ID
isActive
tbl_SeminarFees
ID
seminar_id -- foreign key
fee_text
{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]'
我做错了什么
谢谢您可以使用基于密钥平等性(又称加入..进入)的组内序列项目来获得与研讨会相关的所有费用:
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()
。但您可以稍后在客户端映射结果
顺便说一句您可以在
研讨会
对象上定义费用
:
public virtual ICollection<SeminarFee> Fees { get; set; }
+1但是,您可以强调,从普通连接到组连接的唯一区别是
到@TimSchmelter,谢谢:)您是对的,我会指出区别这是有意义的,但是当我尝试访问结果中的单个项时,我会遇到运行时错误。错误是:参数类型“SeminarFees”与相应的成员类型“System.Collections.Generic.IEnumerable`1[SeminarFees]”不匹配。如何将结果映射到客户端?@majid看起来您正在尝试将单个费用对象分配给费用集合您使用的LINQ提供程序是什么?实体框架?LINQ到SQL?尼伯酸盐?还有什么?我使用的是LinqToSql如何访问列表中的每个对象?我遇到此错误:参数类型“SeminarFees”与相应的成员类型“System.Collections.Generic.IEnumerable`1[SeminarFees]”不匹配。我在尝试访问foreach循环中的元素时遇到此错误
var results = from s in context.Seminar
join p in context.SeminarFees on s.ID equals p.SeminarID
where s.IsActive == 1
group p by s into grouped
select new {
Seminar = grouped.Key,
Fees = grouped.ToList()
};