2

我有一个看起来像这样的数据库:

tbl_Seminar
   ID
   isActive


tbl_SeminarFees
   ID
   seminar_id -- foreign key
   fee_text

我想获取所有活跃的研讨会(isActive ==1)以及与该研讨会相关的费用列表。每个研讨会在 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]'

我究竟做错了什么?

谢谢

4

2 回答 2

6

您可以使用group join根据键相等(aka 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()在服务器端调用。但是您可以稍后在客户端上映射结果。


顺便说一句,您可以在对象上定义导航属性FeesSeminar

public virtual ICollection<SeminarFee> Fees { get; set; }

在这种情况下,您将能够加载研讨会并收取费用:

var results = context.Seminar.Include(s => s.Fees) // eager loading
                     .Where(s => s.IsActive == 1);
于 2013-06-16T21:29:51.130 回答
1
  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()
                };
于 2013-06-16T21:35:07.087 回答