2014-11-03 90 views
0

我想根据我的子类别列出所有条目。所以我想在加载主页上显示条目列表,而无需事先选择任何类别或子类别。从表中选择第一个ID

我做了一个查询,返回条目列表,但手动subCategoryId。

下面是该查询:

int userId = WebSecurity.GetUserId(User.Identity.Name); 

    var preQuery = (from sub in dc.SubCategory 
        join c in dc.Category on sub.SubCategoryId equals c.Id 
        join u in dc.User on c.UserId equals u.UserId 
        where u.UserId == userId 
        select sub.SubCategoryId).Take(1).FirstOrDefault(); 

     var query = (from e in dc.Entry 
        join sub in dc.SubCategory on e.SubCategoryId equals sub.SubCategoryId 
        join cat in dc.Category on sub.CategoryId equals cat.Id 
        join u in dc.User on cat.UserId equals u.UserId 
        where ((u.UserId == userId) && (cat.UserId == userId) 
         && (sub.CategoryId == cat.Id) && (e.SubCategoryId == preQuery)) 
        select e).ToList(); 

     return View(query); 

所以我的观点是,我想代替手工编写的6号,要采取子类别ID列表,并从中选择第一个ID。我做了prequery,但仍然不是所需的结果。任何建议我做错了什么?

+0

任何原因,为什么你不想预先查找,在其中你会选择冷杉ID。也许这将是最快的选择 – Uriil 2014-11-03 10:26:10

+0

我已经做了prequery,但仍然不是所需的结果。建议我做错了什么? – McKeymayker 2014-11-03 10:37:00

+0

尝试使用让http://stackoverflow.com/questions/5298339/linq-with-subquery-with-let – 2014-11-03 11:17:37

回答

1

我能够得到我的问题的解决方案,所以我张贴解决方案。如果有人提出优化解决方案的建议,欢迎分享。

int userId = WebSecurity.GetUserId(User.Identity.Name); 

     var preQuery = (from e in dc.Entry 
        join sub in dc.SubCategory on e.SubCategoryId equals sub.SubCategoryId 
        join cat in dc.Category on sub.CategoryId equals cat.Id 
        join u in dc.User on cat.UserId equals u.UserId 
        where u.UserId == userId 
        select e.SubCategoryId).Take(1); 

     var query = (from e in dc.Entry 
        join sub in dc.SubCategory on e.SubCategoryId equals sub.SubCategoryId 
        join cat in dc.Category on sub.CategoryId equals cat.Id 
        join u in dc.User on cat.UserId equals u.UserId 
        where ((u.UserId == userId) && (cat.UserId == userId) 
         && (sub.CategoryId == cat.Id) && (e.SubCategoryId == preQuery.FirstOrDefault())) 
        select e).ToList(); 

     return View(query);