Count()列表中的一个specfic属性c#

时间:2018-05-16 21:26:51

标签: c#

if (gardenvlist.Count() == getava.Count())
{

}
else if(oceanvlist.Count() == getava.Count())
{

}
else if (cityvlist.Count() == getava.Count())
{

}

gardenvlist是一个可用于具有名为garden的特定房间的一段时间的日期列表。

getava是一个包含多个房间名称的时段的日期列表:花园,海洋,城市。

我想在getava中选择仅限花园(或其他一些特定名称)的计数,然后与列表进行比较。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,您可以将lambda表达式传递给Count(),以根据属性选择性地计算项目,然后将其与您喜欢的任何内容进行比较。像这样:

if (gardenvlist.Count()== getava.Count(x => x.Name == "GardenName"))

请注意,您需要添加以下using语句: using System.Linq

答案 1 :(得分:2)

还有另一个Count()重载,它将lambda表达式作为参数,您可以在其中过滤要从源集合中计数的元素。

假设你有一个像这样的字符串列表:

var list = new List<string>() {
   "a",
   "b",
   "c",
   "aa",
   "bbb"
};

然后你可以像这样使用它:

var countSingles = list.Count(str => str.Length == 1);

这将计算长度为1的列表元素,因此它将返回3

答案 2 :(得分:0)

使用带谓词的重载。这是签名:

public static int Count<TSource>(this IEnumerable<TSource> source, 
    Func<TSource, bool> predicate);

想象你有这个:

public class Room
{
    public string Name { get; set; }
}

然后你把它们放到一个清单中:

var rooms = new List<Room>()
{
    new Room { Name = "Living" },
    new Room { Name = "Kitchen" }
};

您想知道有多少房间的名称为“Living”:

int count = rooms.Count(x => x.Name == "Living");