我有一个模型课
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
DocumentReference docRef = rootRef.collection("yourCollection").document("yourDocument");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Map<String, Object> map = document.getData();
Log.d(TAG, String.valueOf(map.size()));
}
}
}
});
我有一个控制器类,可将数据库中的数据填充到该模型中
public class Model
{
public string name { get; set; }
public string files { get; set; }
}
如何过滤和合并所有具有相似名字的文件?
我了解了linq并尝试过
List<Model> model = new List<Model>();
while (reader.Read()){
var om = new Model();
if (reader != null)
{
om.name = reader.GetString(0);
om.files = reader.GetString(1);
model.Add(om)
}
答案 0 :(得分:1)
这可能对您有用:
var grouped = model.GroupBy(m => m.name).ToArray();
这将创建类型为grouped
(IGrouping<string, Model>[]
数组)的对象IGrouping...
.ToArray()
是可选的,如果将其删除,则会得到IEnumerable<IGrouping<string, Model>>
,但不要让嵌套的<>
吓到您。
原始列表中的项目按名称分组,因此该组将具有Key
属性,该属性对于该组中的每个元素都是相同的。
要打印结果,例如:
foreach(var group in grouped)
{
Console.WriteLine($"Printing group: {group.Key}");
foreach(var model in group)
{
Console.WriteLine($"\tName: {model.name}, File: {model.file}");
}
}
请注意,组中的每个元素都是模型对象的集合。
使用调试器查看该结构的外观以及是否需要更多帮助-问...
答案 1 :(得分:0)
更改模型
public class Model
{
public string name { get; set; }
public IList<string> files { get; set; }
}
使用字典。
var models = new Dictionary<string, Model>();
while (reader.Read())
{
var om = new Model();
if (reader != null)
{
var name = reader.GetString(0);
var file = reader.GetString(1);
if (models.Contains(name))
models[name].files.Add(file);
else
{
models.Add(name, new Model
{
name = name,
files = new List<string>{files}
});
}
}
}
然后,您可以使用LINQ提取组合列表:
var peopleFileLists = models.Select(x => x.Value).ToList();
foreach(var person in peopleFileLists)
{
foreach(var file in person.files)
Console.WriteLine(person.name + "-" + file);
}