C# 通过多次比较按降序排列
我想对结果进行多次比较,如(按付费用户、更新日期、创建日期)C# 通过多次比较按降序排列,c#,linq,C#,Linq,我想对结果进行多次比较,如(按付费用户、更新日期、创建日期) var order = _vrepository.Details() .Where(od => od.Order.Id != null && od.PlanName.ToLower().Contains("DP".ToLower())
var order = _vrepository.Details()
.Where(od => od.Order.Id != null
&& od.PlanName.ToLower().Contains("DP".ToLower())
&& od.Order.Status == true)
.OrderByDescending(od => od.ValidityTill)
.Select(ord => ord.Order.Id.Value);
上面一个我得到的是付费用户
var updatedList = _repository.GetUsers()
.Where(c => c.UpdatedDate != null
&& fresh <= c.UpdatedDate)
.Select(c => c.Id);
为了显示有序列表,我执行了以下代码:
Func<IQueryable<User>, IOrderedQueryable<User>> orderingFunc = query =>
{
if (order.Count() > 0)
return query.OrderByDescending(rslt => lstId .Contains(rslt.Id))
.ThenByDescending(rslt => lstUpdatedUsersId .Contains(rslt.Id))
.ThenByDescending(rslt => lstCreatedDatewiseUsers.Contains(rslt.Id));
else
return query.OrderByDescending(rslt => lstUpdatedUsersId .Contains(rslt.Id))
.ThenByDescending(rslt => rslt.UpdatedDate);
};
Func orderingFunc=query=>
{
if(order.Count()>0)
返回query.OrderByDescending(rslt=>lstId.Contains(rslt.Id))
.ThenByDescending(rslt=>lstUpdatedUsersId.Contains(rslt.Id))
.ThenByDescending(rslt=>lstCreatedDatewiseUsers.Contains(rslt.Id));
其他的
返回query.OrderByDescending(rslt=>lstUpdateUserSid.Contains(rslt.Id))
.ThenByDescending(rslt=>rslt.UpdateDate);
};
但我得到的结果是一个付费用户,一些创建用户和日期是3年前一样明智。我想得到的确切订单如下
- 有序用户
- 更新用户
- 创建用户
请帮我解决这个问题。希望我能得到正确的结果。我已经根据您的要求尝试了这段代码
public class Program
{
public static void Main()
{
var l1= new List<int>{1,2,3};
var l2= new List<int>{4,5,6};
var l3= new List<int>{7,8,9};
var testList = new List<Test>{new Test{Id=9,Name="test1"},new Test{Id=11,Name="test1"},new Test{Id=5,Name="test1"},new Test{Id=7,Name="test1"},new Test{Id=2,Name="test1"}};
var orderedList= testList.OrderByDescending(e=> l1.Contains(e.Id)).ThenByDescending(e=> l2.Contains(e.Id)).ThenByDescending(e=> l3.Contains(e.Id));
Console.WriteLine(string.Join("\t", orderedList.Select(e=> e.Id).Cast<int>().ToArray()));
// it prompts 2 5 9 7 11
}
}
public class Test{
public int Id{get; set;}
public string Name{get; set;}
}
公共类程序
{
公共静态void Main()
{
var l1=新列表{1,2,3};
var l2=新列表{4,5,6};
var l3=新列表{7,8,9};
var testList=new List{new Test{Id=9,Name=“test1”},new Test{Id=11,Name=“test1”},new Test{Id=5,Name=“test1”},new Test{Id=7,Name=“test1”},new Test{Id=2,Name=“test1”};
var orderedList=testList.OrderByDescending(e=>l1.Contains(e.Id))。然后ByDescending(e=>l2.Contains(e.Id))。然后ByDescending(e=>l3.Contains(e.Id));
Console.WriteLine(string.Join(“\t”,orderedList.Select(e=>e.Id).Cast().ToArray());
//它会提示2 5 9 7 11
}
}
公开课考试{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
它的工作原理和你预期的一样。也许我还不明白你想要实现什么。
可能您用于对项目进行排序的函数位于if语句的错误分支中,请检查
if(order.Count()>0)
是否存在重复项。您是否解决了此问题?否。我无法。没有人给我一个正确的答案。我试过了。但是它没有显示准确的结果为什么结果是错误的?在我的回答中,哪一个是错误的行为?
Func<IQueryable<User>, IOrderedQueryable<User>> orderingFunc = query =>
{
if (order.Count() > 0)
return query.OrderByDescending(rslt => lstId .Contains(rslt.Id))
.ThenByDescending(rslt => lstUpdatedUsersId .Contains(rslt.Id))
.ThenByDescending(rslt => lstCreatedDatewiseUsers.Contains(rslt.Id));
else
return query.OrderByDescending(rslt => lstUpdatedUsersId .Contains(rslt.Id))
.ThenByDescending(rslt => rslt.UpdatedDate);
};
public class Program
{
public static void Main()
{
var l1= new List<int>{1,2,3};
var l2= new List<int>{4,5,6};
var l3= new List<int>{7,8,9};
var testList = new List<Test>{new Test{Id=9,Name="test1"},new Test{Id=11,Name="test1"},new Test{Id=5,Name="test1"},new Test{Id=7,Name="test1"},new Test{Id=2,Name="test1"}};
var orderedList= testList.OrderByDescending(e=> l1.Contains(e.Id)).ThenByDescending(e=> l2.Contains(e.Id)).ThenByDescending(e=> l3.Contains(e.Id));
Console.WriteLine(string.Join("\t", orderedList.Select(e=> e.Id).Cast<int>().ToArray()));
// it prompts 2 5 9 7 11
}
}
public class Test{
public int Id{get; set;}
public string Name{get; set;}
}