你好,我有一张这样的 table =>

    stateID    requestNo    reqStateID       reqStateDate
       1          1             13        03.01.2012 10:57
       2          1              3        03.01.2012 10:58
       3          2              3        03.01.2012 11:14
       4          2              3        03.01.2012 11:15
       5          1              5        03.01.2012 22:28
       6          1              7        05.01.2012 14:54
       7          3              3        05.01.2012 14:55

我需要获取上次添加的 (reqStateDate) 唯一请求号 (requestNo)。
我试过这样的事情,但它不起作用..
    public List<ReqStates> GetRequests(int reqStateID)
    {
        return  (from rs in db.ReqStates
                          where rs.reqStateID== reqStateID
                          orderby rs.reqStateDate descending
                          select rs).Distinct().ToList();
    }

如果参数 (reqStateID) 为 3,我必须获得 2 个请求。 requestNo = 2 和 requestNo = 3。
因为,两个请求的 reqstateID 都是 3 并且它们添加的日期是最新的。
RequestNo=1=> 最后添加的状态是 13。
这就是它(1)不应该来的原因。

我希望有人可以帮助我,并显示一个简单的方法。

最佳答案

您必须通过它应该区分值的属性来告诉 Distinct。如果未指定任何值,则默认相等比较器将用于区分值。

您在这里有两个选择:

  • IEqualityComparer 传递给 distinct。
  • IEquatable 上实现 ReqStates

  • 例子:
    class ReqStatesComparer: IEqualityComparer<ReqStates>
    {
      public bool Equals(ReqStates a, ReqStates b)
      {
        return a.requestNo == b.requestNo;
      }
    
      public int GetHashCode(ReqStates rs)
      {
        return rs.GetHashCode();
      }
    }
    
    
        public List<ReqStates> GetRequests(int reqStateID)
        {
            return  (from rs in db.ReqStates
                              where rs.reqStateID== reqStateID
                              orderby rs.reqStateDate descending
                              select rs).Distinct(new ReqStatesComparer()).ToList();
        }
    

    关于c# - 如何使用 LINQ 获取不同的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8747682/

    10-09 19:43