我有幾個表,這是我需要實作的目標。
這樣就可以從一個表中獲得所有的行
var FRA = from prod in _cctDBContext.Fra
where prod.ActTypeId == 1
從這里面,我得到了所有的行,其中ActTypeID。
然后我需要用從中得到的ID來查詢另一個表
foreach (var item in FRA)
{
var FRSA = _cctDBContext.Frsa
.Select(p => new { p.Fraid, p.Frsa1,
p.Frsaid, p.CoreId,
p.RelToEstId, p.ScopingSrc,
p.Mandatory })
.Where(p => p.Fraid == item.Fraid)
.ToList()。
}
然后我需要將其中的每一個推送到Entity Framework。我通常這樣做:
foreach (var item in FRA)
{
var FinanicalReportingActivity = new FinancialReportingActivity { FinancialReportingActivityId = item。 Fraid, ScopingSourceType = item.ScopingSrc, Name = item.Fra1, MandatoryIndicator = item.Mandatory, WorkEffortTypeId = 0 }。
_clDBContext.FinancialReportingActivity.AddRange(FinanicalReportingActivity)。
但是由于我使用了2個for each回圈,我無法讓變數發揮作用,因為我找不到一種方法來獲取作為物體背景關系的本地變數。
誰能想出一個更好的方法來撰寫這個代碼?
謝謝
uj5u.com熱心網友回復:
看起來你可以作為一個單一的連接來做這個:
var query =
from prod in _cctDBContext.Fra
where prod.ActTypeId == 1
join p in _cctDBContext.Frsa on prod.Fraid equals p.Fraid
選擇 新
{
p.Fraid,
p.Frsa1,
p.Frsaid,
p.CoreId,
p.RelToEstId,
p.ScopingSrc,
p.強制性
};
uj5u.com熱心網友回復:
看起來你正在從一個資料庫中加載一組物體的資料,并希望在另一個資料庫中創建匹配的類似物體。
導航屬性在這里會有很大的幫助。Frsa似乎是Fra下的一個子集合,所以這可以(如果不是已經)作為Fra物體中的一個集合進行連接:
這樣你就只需要在Fra下的一個子集合中進行連接。
那么你只需要進行一次查詢,就可以訪問每個Fra和它相關的Frsa的詳細資訊。在你的案例中,你似乎對相關的FRSA細節更感興趣,以填充這個ReportingActivity:
在你的案例中,你對相關的FRSA細節更感興趣。
var details = _cctDBContext.Fra
.Where(x => x.ActTypeId == 1)
.SelectMany(x => x.Frsa.Select(p => new)
{
p.Fraid,
p.Frsa1,
p.Frsaid,
p.CoreId,
p.RelToEstId,
p.ScopingSrc,
p.Mandatory
}).ToList()。
但是如果這種關系是雙向的,即Fra包含Frsas,而Frsa包含對Fra的參考,那么這可以簡化為:
var details = _cctDBContext.Frsa
.Where(x => x.Fra.ActTypeId == 1)
.Select(p => new new
{
p.Fraid,
p.Frsa1,
p.Frsaid,
p.CoreId,
p.RelToEstId,
p.ScopingSrc,
p.Mandatory
}).ToList()。
這兩種方法都應該給你來自FRSA的細節,以填充你的報告物體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/309884.html
標籤:
