私は次のviewModelクラスを持っています:-
public class RackJoin
{
public TMSRack Rack { get; set; }
public Resource Resource { get; set; }
public Technology Technology { get; set; }
public ComponentDefinition ComponentDefinition { get; set; }
public SDOrganization Site { get; set; }
public SDOrganization Customer { get; set; }
}
そして、2 つのエンティティを結合するための次の未完成のリポジトリ モデル メソッド:-
public IQueryable<TMSRack> AllFindRacks(string q)
{
List<RackJoin> rakjoin = new List<RackJoin>();
var result = from rack in tms.TMSRacks
.Include(rack => rack.DataCenter)
.Include(rack => rack.Zone)
.Include(rack => rack.TMSFirewalls)
.Include(rack => rack.TMsRouters)
.Include(rack => rack.TMSServers)
.Include(rack => rack.TMSStorageDevices)
.Include(rack => rack.TMSSwitches)
.Include(rack => rack.Technology)
join resource in entities.Resources
.Include(a => a.ComponentDefinition)
.Include(a => a.ResourceLocation.SiteDefinition.SDOrganization)
.Include(a => a.ResourceLocation.SiteDefinition.AccountDefinition.SDOrganization)
on rack.Technology.IT360ID equals resource.RESOURCEID
where (q == null || rack.Technology.Tag.ToUpper().StartsWith(q.ToUpper()))
select //not sure what i should write here;
最初の質問; List<RackJoin>
しかし、上記の方法で、結合結果に基づいてデータを入力する方法がわかりません。
2 番目の質問; 上記のメソッドを次のアクション メソッドから呼び出しています:-
public ActionResult Index(string searchTerm = null, int page = 1)
{
var racks = repository.AllFindRacks(searchTerm).OrderBy(a => a.Technology.Tag).ToPagedList(page, 5);
if (Request.IsAjaxRequest())
{
return PartialView("_RackTable", racks);
}
return View(racks);
}
つまり、ページングと結合がどのように連携するかを知ることができますか? つまり、EF は where 句を満たすすべてのレコードに対して結合を行い、次にスキップとテイクを行います。また、スキップとテイクが適用されるエンティティは?