我是公司的新人,他們雇我為他們的WPF應用程式制作一個MCV版本。 我們使用物體框架來獲取資料。 這里有一個難題。 我有很多表要取,同時放入一個查詢。 我的做法是:
... context.Citizens.Expand("person,person/passport" ) ...
擴展方法可以作業,但有一個限制,即添加約15個表。不幸的是,我達到了限制,需要更多。
因此,WPF應用程式解決這個問題的方法是將以前的查詢放入一個DataServiceCollection中,并對其使用.Load<T>方法。我的理解是,它采用任何EF資料模型,并添加缺失的欄位,并在各處填充資料。(有點像一個超級合并)。
MVC不支持這個神奇的功能,所以我需要幫助來做一些完全相同的事情。
舉例說明。 在.Load方法之前的表格:
Citizen { id, name, personId }
個人 { id, LoginInfo, PassportId }
護照 { id, RealName, passportNumber etc etc }
在.Load方法之后的DataServiceCollection:
Citizen {id, name, personId, LoginInfo, PassportId, RealName, passportNumber etc etc}.
有人知道我怎樣才能實作這個目標嗎?我希望有一個List<T>的擴展,這樣它就可以做到。但任何東西都會有幫助。
Btw: 我不需要DataServiceCollection<T>的內容更新,只是需要資料合并功能。
編輯:
在 "合并 "這個詞上似乎有一些混淆......所以讓我解釋一下:
WPF應用程式做的是 "合并"。
WPF應用程式是這樣的:
WPF應用程式是這樣的:
var expandString =
"Person"
",Person/foobar"/span>
",Person/foobar/bar">
",Person/foobar/foofoofoobar"/span>
",Person/foobar/foofoofoobar/Type"
",Foo1"/span>
",Foo1/foofoo"/span>
",Foo2"/span> ",Foo2"/span>
",Foo2/foofoo"/span> ",Foo2"/span>
",Foo3" ",Foo3"
",Foo3/foofoo">
",Foo4">
",Foo4/foofoo"/span> ",Foo4"/span>
",Foo5"/span> ",Foo5"/span>
",Foo5/foofoobar"> ",Foo5">
",Foo5/foofoobar/bar"。
IQueryable<Citizen> citizensQuery =
from cit in context.Citizens.ExpandString)
where cit.Person.boobar.bar.barfoo.fuuId == _fuuId
select cit.Person.boobar.bar.barfoo.fuuId == _fuuId。
var result = new DataServiceCollection<Citizen>(citizenQuery.Mode.None)
TrackingMode.None)。)
然后當你想在 "結果 "中添加更多額外的表時,你只需使用.Load方法:
。var moreExpandStrings =
"Citizenfoo"/span>
",foo6"/span>
",foo7"",foo8" ",foo8"
",foo9" ",foo9"
",foo10" ",foo10"
",foo11"。
結果.加載(
context.Citizens.Expand(moreExpandStrings)
.Where(x => x.Person.boobar.bar.barfoo.fuuId == _fuuId
));
這個result.Load<T>()的方法將T和額外的變數添加到EF模型中,并將資料庫中的資料填入。
這就是我所尋找的串列擴展方法。如果需要的話,代碼可以很重。
uj5u.com熱心網友回復:
如果你只是在尋找資料合并的功能,你可以通過應用Linq來使用AddRange()方法。 這里有一個之前發布的解決方案
uj5u.com熱心網友回復:
這看起來更像是一個JOIN,而不是一個MERGE。與Expand相當的EF是Include。如果你只是想從你的問題中建立投影,并且你的物體和導航屬性被正確配置,你可以做一個簡單的LINQ投影,而不需要INCLUDEs(如果關系沒有被配置,你可以使用JOIN)。公民將有Person導航屬性,Person將有Passport導航:
var CitizenInfoList = context.Citizens
.Where(x => x.Foo == "Bar" )
.Select(x => new myModel {
id = x.Id,
name = x.Name,
LoginInfo = x.Person.LoginInfo,
PassportId = x.Person.PassportId,
RealName = x.Person.Passport.RealName ,
PassportNumber = x.Person.Passport.PassportNumber
})
.ToList()。
要直接轉儲物體:
var CitizenInfoList = context.Citizens
.Include(p => p.Person.Select(c => c.Passport))
.ToList()。
另一個選擇是資料庫視圖或存盤程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/319281.html
標籤:
