我正在尝试按数据创建日期(月份和年份)对数据进行分组。如果特定组已存在,如何迭代 ObservableCollection of Groups,如果存在,则将数据添加到具有相同月年 ID 的组中?如果包含日期的组不存在,程序应创建一个组并将数据添加为第一项。我有两个数据模型类 - 数据和组:
public class Data
{
public string Name { get; set; }
public double Amount { get; set; }
public static DateTimeOffset Date { get; set; }
private string ID = Date.ToString("MM/yyyy");
}
public class Group
{
public ObservableCollection<Data> DataGroup { get; set; }
private string ID;
public Group(string id)
{
ID = id;
}
}
这是我想象的 AddData 方法的工作方式:
public async Task AddData(Data data)
{
var id = data.ID;
Group newGroup = new Group(id);
foreach (Group group in _groups)
{
if (/*what kind of condition should i put here?*/)
{
if (group.ID == id)
{
newGroup.DataGroup.Add(data);
}
}
else
{
_groups.Add(newGroup);
newGroup.DataGroup.Add(data);
}
}
await saveDataAsync();
}
现在,有没有办法检查 _groups 集合是否有等于 newGroup(相同 ID)的项目?
最佳答案
一种可能的解决方案是通过 FirstOrDefault
获取现有组。如果不存在,请创建一个并将其添加到 _groups
集合中。无论哪种方式,此后您都将获得该组的相关引用,并且只需添加数据即可。
示例:
public async Task AddData(Data data)
{
var id = data.ID;
//Will return null if no such group exists
Group relevantGroup = _groups.FirstOrDefault(f => f != null && f.ID == id);
if(relevantGroup == null)
{
//Didn't have one so we add the a new group and assign it to the variable
relevantGroup = new Group(id);
_groups.Add(relevantGroup);
}
//This now always references the correct group, just add your data item
relevantGroup.Add(data);
await saveDataAsync();
}
编辑:添加了null
引用检查。
关于c# - 对 ObservableCollection<T> 中的数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30528301/