C# 如何使用linq获取模型元素的计数

C# 如何使用linq获取模型元素的计数,c#,linq,.net-core,enums,C#,Linq,.net Core,Enums,我正在使用.NETCore。我有嵌套模型,它按行显示数据 public class States { public string Name { get; set; } public List<DateData> States { get; set; } } public class DateData { public DateTime Date { get; set; } public StateType type { get; set; } } public e

我正在使用.NETCore。我有嵌套模型,它按行显示数据

public class States
{
  public string Name { get; set; }
  public List<DateData> States { get; set; }
}

public class DateData
{
  public DateTime Date { get; set; }
  public StateType type { get; set; }
}

public enum StateType 
{
  Available,
  NotAvailable
}
公共类状态
{
公共字符串名称{get;set;}
公共列表状态{get;set;}
}
公共类数据
{
公共日期时间日期{get;set;}
公共StateType类型{get;set;}
}
公共枚举状态类型
{
可用,
显著的
}
其中StateType是enum

这里,States包含state类型和按行显示的每个日期

public class States
{
  public string Name { get; set; }
  public List<DateData> States { get; set; }
}

public class DateData
{
  public DateTime Date { get; set; }
  public StateType type { get; set; }
}

public enum StateType 
{
  Available,
  NotAvailable
}
我需要根据枚举筛选我的响应,以获得NotAvailable date的总计数

注意:我需要根据日期获取数据。例如,StateType.NotAvailable的2020年10月9日的所有数据。列表状态包含同一日期的多个数据


如何实现这一点?

对于单个
状态
对象

obj.States.Where(x=>x.type==StateType.NotAvailable.Count())
查看
状态列表
对象

objs.SelectMany(x=>x.States)。其中(x=>x.type==StateType.NotAvailable)。Count()

如果我理解正确,您希望从States对象中统计其不可用状态列表中的所有状态

var stateObject= new States()

var count = stateObject.States.Count(x => x.type == StateType.NotAvailable);

您可以使用Linq
Where
函数过滤列表,然后使用
Count()
合计之后剩余的项目数

e、 g.如果
s
状态的实例,则:

var count = s.StateList.Where(st => st.type == StateType.NotAvailable).Count();
或者:

var count = s.StateList.Count(st => st.type == StateType.NotAvailable);
工作演示:


注意:我将
States.States
重命名为
States.StateList
,因为(至少在.NET Core 3.1中)属性不能与其封闭类型具有相同的名称。

假设
s
是类型为
States
的对象,那么可能
s.States.Where(st=>st.StateType==StateType.NotAvailable)。Count
?(未经测试)@ADyson我尝试过这个,但它返回的是整个模型,没有经过任何过滤。“但它返回的是整个模型,没有经过任何过滤。”你确定收藏中有可用的<代码>吗?@AbhishekSingh我不同意-演示:。你一定是算错了。我已经用下面的答案形式化了-,请看一下。第二个答案是我的,但我需要根据日期获取数据。如2020年10月9日的所有StateType数据。NotAvailable@AbhishekSingh“但我需要根据日期获取数据。比如,所有2020年10月9日的数据都是StateType.NotAvailable”你为什么不在原来的帖子中提到这一点?这听起来很重要。这是最后一次要求变更吗?或者,在这里的人们调整他们的解决方案并解决您的第二个问题后,您会挖掘第三个问题吗?@MongZhu我的道歉,先生,您能帮助解决这个问题吗?@AbhishekSingh senz已经解决了,请看comment@AbhishekSingh看看我的第二条评论