public class Name {
public string language { get; set; }
public string text { get; set; }
}
public class ValueItem {
public string id { get; set; }
public List<Name> names { get; set; }
public object syn { get; set; }
public List<string> prop { get; set; }
public string dataType { get; set; }
}
public class Source {
public string id { get; set; }
public string name { get; set; }
}
public class Result {
public List<ValueItem> valueItems { get; set; }
public Source source { get; set; }
}
public class Data {
public List<Result> result { get; set; }
public int totalpages { get; set; }
public int totalrecords { get; set; }
public int pagesize { get; set; }
public int pagenumber { get; set; }
}
我具有如上所述的模型结构,我试图基于文本删除 Name 对象。如果我传递的字符串位于Name.text中,则应删除该特定名称对象。如何使用linq或lambda实现此目的。
我已经尝试过:var data1= data.Result.Where(x=>x.ValueItems.Where(a=>a.Names.SelectMany(b=>!str.Contains(b.Text)))).ToList()
答案 0 :(得分:1)
您可以通过返回原始数据的过滤版本来实现所需的目标:
data.result = data.result.Select(x => new Result
{
source = x.source,
valueItems = x.valueItems.Select(a =>
new ValueItem
{
prop = a.prop,
dataType = a.dataType,
id = a.id,
syn = a.syn,
names = a.names
.Where(i => i.text != stringToRemove)
.ToList()
}).ToList()
}).ToList();
但是,实现此目标的替代版本(不使用LINQ)可能是:
foreach (var result in data.result)
{
foreach (var resultValueItem in result.valueItems)
{
resultValueItem.names.RemoveAll(i => i.text == stringToRemove);
}
}
注意:值得一提的是,第二个选项在性能方面更为有效,因为这里没有发生内存分配。
上述解决方案的一些注意事项:
stringToRemove
和i.text
,以防万一您想要不区分大小写的比较。