Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取子记录列表_C#_Linq_Linq To Sql - Fatal编程技术网

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()
                };