C# 使用LINQ到SQL检索嵌套集合
我正在尝试获取一个TransferID列表,对于每个传输,一个ChargeID列表,对于每个传输,一个ReferralMatches列表 这是我得到的C# 使用LINQ到SQL检索嵌套集合,c#,sql,linq,C#,Sql,Linq,我正在尝试获取一个TransferID列表,对于每个传输,一个ChargeID列表,对于每个传输,一个ReferralMatches列表 这是我得到的 (from c in Commissions where c.TransferStatus == "Paid" where c.AdminHasReleased == false join r in ReferralMatches on c.ReferralMatchId equals r.ReferralMatchId group c by n
(from c in Commissions
where c.TransferStatus == "Paid"
where c.AdminHasReleased == false
join r in ReferralMatches on c.ReferralMatchId equals r.ReferralMatchId
group c by new { c.TransferId } into grp
select new {
TransferId = grp.Key.TransferId,
Charges = from c in grp
group c by c.ChargeId into grp2
select new {
ChargeId = grp2.Key,
Referrals = grp2 }
})
这是有效的,而且非常接近。它拉回的东西看起来像这样:
这看起来像是属于TransferId的费用,但我需要的是属于TransferId费用的ReferralMatches。我尝试了另一个选择来拉入“r”,但遇到了错误
我想LINQ的人可以从这篇文章中收集他们需要的信息,但是如果需要更多的信息,请告诉我。多谢各位
编辑、添加表格示例
这两个扩展表是我必须使用的。它可能没有什么用处,但请记住ReferralMatch表也有ChargeId。一个chargeId可以覆盖多个ReferralMatch,但一旦资金可用,就会发生银行转账……当发生这种情况时,会在佣金表中创建记录
所以我要找的是TransferID的列表,foreach Id是chargeId的列表,foreach chargeId是ReferralMatches的列表……最里面的ReferralMatches列表是该表中的完整记录
编辑,更多尝试
这是我的最新尝试
from c in Commissions
where c.TransferStatus == "paid"
group c by c.TransferId into transferGroup
select new {
TransferId = transferGroup.Key,
Charges = from c in transferGroup
join r in ReferralMatches on c.ReferralMatchId equals r.ReferralMatchId
group c by c.ChargeId into chargeGroup
select new {
ChargeId = chargeGroup.Key,
Referrals = from r in chargeGroup
select new {
Referral = r
}
}
}
这就引出了这样的问题:
但是,除非我读错了,最里面的项目仍然是佣金表,这是没有意义的。我需要它是ChargeId为[whatever]的ReferralMatches您可能需要将表达式一分为二,在第一个表达式中遍历引用,然后在第二个表达式上分组,如下所示:
var commissionAndReferrals =
from c in Commissions
where c.TransferStatus == "Paid"
where c.AdminHasReleased == false
join r in ReferralMatches on c.ReferralMatchId equals r.ReferralMatchId
select new { Commisson = c, Referral = r };
var result =
from cAndR in commissionAndReferrals
group cAndR by cAndR.Commisson.TransferId into transferGroup
select new
{
TransferId = transferGroup.Key,
Charges = from c in transferGroup
group c by c.Commisson.ChargeId into chargeGroup
select new
{
ChargeId = chargeGroup.Key,
Referrals = chargeGroup.Select(x => x.Referral)
}
};
我不清楚您到底想要实现什么-示例结果集看起来像一个TransferId列表,每个TransferId都有一个ChargeId列表(尽管示例中每个传输组只有一个),其中每个ChargeId都有一个ReferralMatches列表。您能指出您的示例数据的预期结果对象图应该是什么样子吗?你也可以发布佣金和推荐匹配的对象结构吗?是的,我会发布表格。示例结果确实是一个TransferID列表,对于每个ChargeID列表…但在其中是不正确的…我知道它说的是转介,但这些记录来自佣金表,而不是转介匹配表。我需要最里面的集合是基于chargeId的ReferralMatches的完整集合。张贴表格…太好了,谢谢更新。另一件事,从对象结构来看,每次传输似乎总是只有一个ChargeId,因此每次传输都不会有列表,对吗?我认为如果您将这个庞然大物分解为几个较小的查询,它会更有意义,并且更易于维护。抱歉,延迟了。关于每次传输一个chargeId,不,这只是以这种方式显示,因为我只有几个测试行。将有一个或多个属于费用的转介,也将有一个或多个属于转账的费用。这种情况下,会对大量转介进行付款或收费。一旦付款结清,就会发生银行转账。银行转账每天都会发生,可以支付当天结清的任何费用。所以:一次转移有多个费用,有多个行项目(推荐),感谢回复,在一个数据库快照中完成这一切将是非常甜蜜的,但如果没有其他内容,我对LINQ分组有很多了解。我想我会做一些性能测试,看看这种方法的优缺点是什么,或者仅仅使用几个点击来构建一个具有多个简单方法的复杂对象……或者就这一点而言,也许最好将所有数据推到单独的对象中,忘记嵌套,只在视图级别使用LINQ来收集和排序数据……嗯