我有一个名为“ product”的表的结果列表。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="line">
<stroke android:width="5dp"
android:color="#698cc8"
/>
</shape>
</item>
</selector>
我想根据ArrivalDate降序对结果进行排序,其中User是“ James”,这意味着它应该返回给我第三行结果。 但是,如果我执行以下操作:
Id User ProductName ArrivalDate
---- ----- ------------ ------------
1 James Shoes 05/07/2016
2 Jenny TShirt 05/01/2018
3 James Pants 13/05/2017
我得到的结果仍然是第一个,如果有人可以指导的话,请感到满意。 下面是示例代码:
return List(spec).OrderByDescending(x=>x.ArrivalDate).FirstOrDefault();
答案 0 :(得分:1)
我没有为用户找到过滤器,您正在按用户订购。试试这个。
return List(spec).Where(x => x.User == "James")
.OrderByDescending(y => y.ArrivalDate)
.FirstOrDefault();
答案 1 :(得分:0)
如果您只想获取特定用户的上次到达时间,则应在where子句中添加额外条件 FirstOrDefault生成这样的查询:
Select top 1 ....
答案 2 :(得分:0)
在我看来,您正在尝试使用自己的方法封装一些基本的Linq
功能,但是您只是使事情复杂化,同时又使其变得有限且难以使用,而不是灵活且易于使用。
这就是我要做的:
public void getOrderProductDetails
{
var data = _productRepository
.Where(x => x.User == user)
.OrderByDescending(x => x.ArrivalDate)
.FirstOrDefault();
// process data ...
}
答案 3 :(得分:0)
您也可以在“ FirstOrDefault”方法中放置“过滤器”。
我在下面展示了一个通用示例(双向)。
还要注意字符串比较,以区分大小写。
ICollection<Employee> employees = (blah blah blah);
Employee firstEmployeeWhereClause = employees.Where(z => z.LastName.Equals("Smith", StringComparison.OrdinalIgnoreCase)).OrderByDescending(x => x.EmployeeSurrogateKey).FirstOrDefault();
Employee secondEmployeeNoWhereClause = employees.OrderByDescending(x => x.EmployeeSurrogateKey).FirstOrDefault(z => z.LastName.Equals("Smith", StringComparison.OrdinalIgnoreCase));