你好,我有一张这样的 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/