我有特定的问题。我对SQL不太有经验,所以这可能是一个愚蠢的问题。我有以下课程
class StructuredResult
{
public Pay Pay{ get; set; }
public Processing Processing{ get; set; }
public Member Member { get; set; }
public StructuredResult()
{
}
}
这就是我得到的代码
var allPaying = (from pay in Entities.Pays
join prc in Entities.Processingss on pay.IDCalculation equals cal.IDCalculation
join mbr in Entities.Members on pay.IDMember equals mbr.IDMember
where pay.IDMember == IDMember
orderby prc.DateFrom descending
select new StructuredResult()
{
Pay = pay,
Processing = prc,
Member = mbr
}).ToList();
代码工作正常,我更改了在此处发布的内容,也许某些名称更改是不行的。我需要得到的是这个:
class StructuredResult
{
public Pay Pay{ get; set; }
public Processing Processing{ get; set; }
public Member Member { get; set; }
public List<PayDetail> PayDetails { get; set; }
public StructuredResult()
{
}
}
有谁知道这是否可能?付款明细与 Pay.ID = PayDetail.ID 相关联 提前致谢
为了也用PayDetail
的集合填充StructuredResult
,您需要使用Group Join
。看:
- MSDN on
GroupJoin
- 最后 Linq 到 实体加入 vs 组加入。
所以:
var allPaying = from pay in Entities.Pays
join prc in Entities.Processingss on pay.IDCalculation equals cal.IDCalculation
join mbr in Entities.Members on pay.IDMember equals mbr.IDMember
join d in Entities.PayDetails on pay.IDMember equals d.ID into details
where pay.IDMember == IDMember
orderby prc.DateFrom descending
select new StructuredResult()
{
Pay = pay,
Processing = prc,
Member = mbr,
PayDetails = details
};
我还建议,由于您使用的是 EF,请查看导航属性。通过以不同的方式定义类,您将以更少的资源获得更多的功能(例如,无需编写连接(
- MSDN - 实体框架关系和导航属性
- MSDN - 如何:使用导航属性导航关系
只是一个小提示 - 您正在定义一个在 id 中没有逻辑的默认构造函数。如果在实际代码中也是如此,则不需要它。它是自动定义的。
这可能有助于您:
var allPaying = (from pay in Entities.Pays
join prc in Entities.Processingss on pay.IDCalculation equals cal.IDCalculation
join mbr in Entities.Members on pay.IDMember equals mbr.IDMember
where pay.IDMember == IDMember
orderby prc.DateFrom descending
select new StructuredResult()
{
Pay = pay,
Processing = prc,
Member = mbr,
PayDetails = (from pd in Entities.PayDetails
where pd.ID == pay.IDMember
select pd).ToList())
}).ToList();