如何使用LINQ获取不同的值?

bla*_*ist 3 c# linq distinct

你好,我有一个这样的表=>

    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
Run Code Online (Sandbox Code Playgroud)

我需要得到,最后添加(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();            
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*fan 5

你必须告诉Distinct它应该区分值的属性.如果未指定任何内容,则将使用默认的相等比较器来区分值.

你有两个选择:

  1. 传递IEqualityComparer给不同的.
  2. 落实IEquatableReqStates.

例:

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();            
    }
Run Code Online (Sandbox Code Playgroud)