1

I have three tables and I have used edmx designer to add associations between them. Below is how they are linked.

(table1) Loans - (table 2) Investor : Many to One relationship (Table2) Investor - (Table3) InvestorInfo : One to Many relationship

I want to get [1] Total loans count sold to one investor, [2] Investor name and [3] investor's service fee which is stored in Table3 at idx = 2005 for each investor ("investor id & idx" is primary key of table3 - InvestorInfo table).

How do I do that in below query? I am forced to select 'FirstOrDefault()' to access any column in Table3 (See commented lines). If I use FirstOrDefualt, I get a record where idx = 1 and not 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にあるか、何を選択したいのかわかりませんが、多対多のスキーマがあると仮定しますInvestorLoansもっとInvestorInfos。たとえば、 で投資家情報に参加するすべてのローンを取得したいとしidx = 2005ます。私が間違っている場合は私を修正し、私が正しい場合はあなたの質問を修正してください!

オブジェクトから始めて、InvestorInfo1 つしかないことを知っていますが、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);

繰り返しますが、何をしようとしているのか、またデータが実際にどのように見えるのかは明確ではありませんが、1 対多の関係では、「1」側のそれぞれに対して必ず「多」側が複数存在することになります。


最大値を取得するには、Max演算子を使用します。

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