0

我在这个查询组织的帮助下从数据库中获取所有记录。它们变成大约 30-40 条记录

     List<PagesRef> paages = (from pagess in pagerepository.GetAllPages()
                  join pagesref in pagerepository.GetAllPageRef()
                  on pagess.int_PageId equals pagesref.int_PageId
                  where (pagess.int_PostStatusId != 3 && pagess.int_OrganizationId == Authorization.OrganizationID)
                  && pagesref.int_PageRefId == pagesref.Pages.PagesRefs.FirstOrDefault(m => m.int_PageId == pagess.int_PageId && m.bit_Active == true && (m.vcr_PageTitle != null && m.vcr_PageTitle != "")).int_PageRefId
                  select pagesref).ToList();

接下来下一步我要做的是将上面的列表作为linq 循环到对象查询,而不去数据库生成 3 级分层记录。有人可以给我一些见解或想法我该怎么做?

编辑

    var parentrecord = paages.Where(n => n.Pages.int_PageParent == 0).OrderBy(m => m.Pages.int_SortOrder == null).OrderBy(m => m.int_PageId);

            foreach (var secondlevel in parentrecord) // if parentrecord found
            {
                var seclevel = paages.Where(m => m.Pages.int_PageParent == secondlevel.Pages.int_PageId).OrderBy(m => m.Pages.int_SortOrder == null).OrderBy(m => m.Pages.int_SortOrder);

                secondlevel.vcr_PageTitle = "parent";
                pagesreff.Add(secondlevel);   // if parentrecord found then loop and add in there

                foreach (var thdlevel in seclevel)
                {
                   var thirdlevel = paages.Where(m => m.Pages.int_PageParent == thdlevel.Pages.int_PageId).OrderBy(m => m.Pages.int_SortOrder == null).OrderBy(m => m.int_PageId).OrderBy(m => m.Pages.int_SortOrder);

                    thdlevel.vcr_PageTitle = "child";
                    pagesreff.Add(thdlevel);   // if parentrecord child found then loop and add in there

                    foreach (var thd in thirdlevel)
                    {
                        thd.vcr_PageTitle = "subchild";
                        pagesreff.Add(thd);   // if parentrecord child found then loop and add in there
                    }
                }
            }
4

1 回答 1

1

ToList();linq-to-sql 之后转到数据库并获取行。之后,您拥有对象集合,并且可以使用 linq to objects 做您想做的事情:

var filteredList = paages.Where(someFilter);

不会有新的 sql 请求。

更新 您的问题是您在导航属性中进行过滤,因此您应该在第一个查询中加载导航属性。我不确定(linq-to-sql 是多年前的:)),但这应该对您有所帮助(我假设它m.Pages是 type Page):

List<PagesRef> paages = (from pagess in pagerepository.GetAllPages()
                  join pagesref in pagerepository.GetAllPageRef()
                  on pagess.int_PageId equals pagesref.int_PageId
                  where (pagess.int_PostStatusId != 3 && pagess.int_OrganizationId == Authorization.OrganizationID)
                  && pagesref.int_PageRefId == pagesref.Pages.PagesRefs.FirstOrDefault(m => m.int_PageId == pagess.int_PageId && m.bit_Active == true && (m.vcr_PageTitle != null && m.vcr_PageTitle != "")).int_PageRefId
                  select pagesref).AssociateWith<Page>.ToList();
于 2013-04-26T11:30:19.930 回答