MVC5 LINQ仅在最新记录是特定条件时显示

时间:2016-06-04 13:47:34

标签: c# sql linq asp.net-mvc-5

对于标题不清楚的原谅,不能想出任何更好的方式来表达它。

我有2个表,User和Appeal。

这是该过程的工作方式:

  1. 用户可以请求查看其他用户的信息。后 请求时,请求将被插入上诉表中 已批准列默认设置为0,待定, 并且已批准为1,而拒绝为2.用户提出请求后,他将无法将该用户视为用户列表的一部分他可以要求查看信息。
  2. 如果请求已被接受或仍处于待定状态,则不应显示在他可以请求查看信息的用户列表中。 然而,如果被拒绝,它会在列表中显示回来,以便用户可以某种方式"重新请求"它再次。条件应仅基于LATEST请求,而不是先前的请求。
  3. 以下是我到目前为止提出的声明,我试图实现上述目标。

    (from user in db.Users
      where user.Roles.Any(r => r.RoleId == roleId)
      where !db.Appeal.Any(y => y.PatientId == user.Id) // if no record found in appeal
      || // or if there's a record
      (db.Appeal.OrderByDescending(a => a.Time).FirstOrDefault().PatientId == user.Id
      && db.Appeal.Any(a => a.PatientId == user.Id && a.IsApprove == 2))
      // but only if the latest request is rejected, show back up 
      // in the user list again so it can be requested again
    
         select new Patient {
           PatientId = user.Id,
           PatientName = user.FullName,
           UniqueId = user.UniqueId
         }).OrderBy(x => x.PatientId);
    

1 个答案:

答案 0 :(得分:0)

最后解决了这个问题。

nameQuery = (from user in db.Users
  where user.Roles.Any(r => r.RoleId == roleId)
  where !db.Appeal.Any(y => y.PatientId == user.Id) // if no record found in appeal
  || 
  db.Appeal.OrderByDescending(x => x.Time).FirstOrDefault(p => p.PatientId 
  == user.Id).IsApprove == 2
  // or got appeal, but the latest result is rejected

  select new Patient {
   PatientId = user.Id,
   PatientName = user.FullName,
   UniqueId = user.UniqueId
   }).OrderBy(x => x.PatientId);

更改

  
    

(db.Appeal.OrderByDescending(a => a.Time).FirstOrDefault()。PatientId == user.Id       &安培;&安培; db.Appeal.Any(a => a.PatientId == user.Id&& a.IsApprove == 2))

  

  
    

db.Appeal.OrderByDescending(x => x.Time).FirstOrDefault(p => p.PatientId           == user.Id).IsApprove == 2