如何解决在 C# 中过滤内部列表 - 根据 where 条件选择
我有一个回应
LIST<ValidationModel> validationDto;
我想返回带有视图列表的 LIST<ValidationModel>
,其中仅包含 gtype=health
我做了以下事情
returnResult = validationDto.Where(a => a.Views.Any(i => i.gType == "health")).ToList();
但没有运气。
有人可以帮忙吗?
public class ValidationModel
{
public MetadataDto Metadata { get; set; }
public string Type { get; set; }
public string PId { get; set; }
public List<ListView> ListViews { get; set; }
}
public partial class ListView
{
public string EType { get; set; }
public string VName { get; set; }
public string FName { get; set; }
public string FType { get; set; }
public string Path { get; set; }
public string GType { get; set; }
public string Enabled { get; set; }
public bool IsTrue { get; set; }
}
解决方法
也许把字符串比较改成忽略大小写,
i.GType.Equals(groupType,StringComparison.OrdinalIgnoreCase)
这在 LinqPad 中有效,
var list = new List<ValidationModel>
{
new ValidationModel { ListViews = new List<View>{ new View { GType="health" } } },new ValidationModel { ListViews = new List<View>{ new View { GType="health" } } },};
var groupType = "health";
list.Where(a => a.ListViews.Any(i => i.GType.Equals(groupType,StringComparison.OrdinalIgnoreCase))).Dump();
,
我认为您误解了 Any
函数。
确定序列的任何元素是否存在或满足 条件。
您应该改用 All
判断一个序列的所有元素是否都满足条件
returnResult = validationDto.Where(a => a.Views.All(i => i.GroupType == groupType)).ToList();
,
每当你对复杂的条件感到困惑时,你可以将逻辑提取到它自己的方法中。这允许您单独测试方法以确保您的逻辑正确。
我对您的要求不是很清楚,但这似乎是正确的:
bool HasOnlyHealth(ValidationModel model)
{
if (model.ListViews.Count != 1) return false;
if (model.ListViews.Single().ToUpper() != "HEALTH") return false;
return true;
}
然后将该方法作为您的委托传递给 Where
子句。
returnResult = validationDto.Where(HasOnlyHealth).ToList();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。