我有在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
我在考慮將列表分成兩個列表,但這會影響處理速度,也不能按我期望的那樣工作,順便說一句,其他專家 –