我有在LINQ过滤数据有问题的值的数据,这里是我的模型:LINQ如何筛选基于性能
public class CoursePlan
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Semester { get; set; }
public string ModuleCode { get; set; }
public string ModuleName { get; set; }
public string Credits { get; set; }
public string OrderNumber { get; set; }
public string ModuleStatus { get; set; }
}
,这里是我的数据Json
这里的问题有些模块具有相同的OrderNumber
这意味着它们是可选的,学生必须研究其中的一个,如果学生已经学习其中之一,我应该忽略同一订单号中的其他模块。
我想回到CoursePlan和这个名单上的列表中是否存在具有相同OrderNumber
检查ModuleStatus
对于他们中的每一个,如果两个项目
任何一个Completed
删除该订单上的其他模块将全部退回。
这里是我的代码
var coursePlanList = await _sqLiteAsyncConnection.Table<CoursePlan>().ToListAsync();
var groupedData = coursePlanList.OrderBy(e => e.Semester)
.GroupBy(e => e.OrderNumber)
.Select(e => new ObservableGroupCollection<string, CoursePlan>(e))
.ToList();
通过这种算法,现在的IM解决这一点,不知道这是否是最好的
var coursePlanList = await _sqLiteAsyncConnection.Table<CoursePlan>().ToListAsync();
List<CoursePlan> finalList = new List<CoursePlan>();
var counter = 0;
foreach (var itemPlan in coursePlanList)
{
if (counter > 0 && counter < coursePlanList.Count)
if (itemPlan.OrderNumber == coursePlanList[counter - 1].OrderNumber)
{
if (itemPlan.ModuleStatus == "Completed")
{
finalList.RemoveAll(a => a.OrderNumber == itemPlan.OrderNumber);
finalList.Add(itemPlan);
}
Debug.WriteLine(itemPlan.ModuleName + "With -->" + coursePlanList[counter - 1].ModuleName);
}
else
finalList.Add(itemPlan);
counter++;
}
var groupedData = finalList.OrderBy(e => e.ModuleStatus)
.ThenBy(e => e.Semester)
.GroupBy(e => e.Semester)
.Select(e => e)
.ToList();
CoursePlanViewList.BindingContext = new ObservableCollection<IGrouping<string, CoursePlan>>(groupedData);
任何建议或指导,将不胜感激
我怀疑这个复杂的东西不能单独使用LINQ来完成,或者至少不能在单个查询中完成。但是一些LINQ专家可能会证明我错了。 – Jason
我在考虑将列表分成两个列表,但这会影响处理速度,也不能按我期望的那样工作,顺便说一句,其他专家 –