1

我有三个表,我使用 edmx 设计器在它们之间添加关联。以下是它们的链接方式。

(表1)贷款-(表2)投资者:多对一关系(表2)投资者-(表3)InvestorInfo:一对多关系

我想获得 [1] 向一位投资者出售的总贷款数量,[2] 投资者姓名和 [3] 投资者服务费,存储在表 3 中,每个投资者的 idx = 2005(“投资者 id 和 idx”是表 3 - InvestorInfo 表)。

我该如何在下面的查询中做到这一点?我被迫选择“FirstOrDefault()”来访问 Table3 中的任何列(参见注释行)。如果我使用 FirstOrDefualt,我会得到一个 idx = 1 而不是 2005 的记录。

 var loanPurchaseData = (from cd in entity.Table1
                        //where cd.Table2.Table3.Select(x => x.IDX == 2005)
                        //where cd.ULDD_SET_POOLS.ULDD_SET_POOLDT.FirstOrDefault().SORT_ID == 2005
                        group cd by new { cd.Table4.PurchaseDate, cd.Number } into grp
                        select new
                        {
                            investor = grp.FirstOrDefault().Investor,
                            no_of_loans = grp.Count(),                                               
                            sort_id = grp.FirstOrDefault().Table2.Table3.FirstOrDefault().SORT_ID,
                            service_fee_rate = grp.FirstOrDefault().Table2.Table3.FirstOrDefault().DT_REAL_PERC_VALUE
                        }).ToList();
4

1 回答 1

0

你的问题不是很清楚 - 我不明白 idx 是在 Table3 还是 Table1 中,以及你想选择什么,但我会假设你有一个多对多模式,其中 anInvestor有零或更多Loans& 零或更多InvestorInfos。例如,您想获得与投资者信息相关的所有贷款idx = 2005。如果我错了,请纠正我,如果我是对的,请纠正你的问题!

从您的InvestorInfo对象开始,您知道只有一个Investor,但会有零个或多个Loans

// only one InvestorInfo for idx, but this isn't clear in your question
var investorInfo = context.InvestorInfos.SingleOrDefault(i => i.idx == 2005);

var loans = investorInfo.Investor.Loans;

您的问题的症结在于您无法获得投资者信息的“贷款服务费”。为什么不?因为那个投资者有5笔贷款。你想要哪一个?

-- we can get the maximum, minimum, sum, etc...
var max = loans.Max(l => l.DT_REAL_PERC_VALUE);
var min = loans.Min(l => l.DT_REAL_PERC_VALUE);
var min = loans.Sum(l => l.DT_REAL_PERC_VALUE);

同样,不清楚您要做什么,也不清楚您的数据实际上是什么样子,但是在一对多的关系中,对于“一”方的每一方,您必然有多个“多”方。


要获得最大值,请使用Max运算符。

service_fee = grp.Max(l => l.Table2.Table3.Max(t => t.DT_REAL_PERC_VALUE)) 
于 2012-08-22T04:08:40.953 回答