例如:
列表是用户列表
First entry: User -> Id=111 name=aaa
First entry: User -> Id=123 name=aaa
First entry: User -> Id=124 name=ccc
First entry: User -> Id=125 name=ddd
First entry: User -> Id=126 name=ddd
如果参数为Id,则结果为5,如果名称为3,则为3(因为有3个唯一名称)
当此参数不同时,预期输出是具有提供参数的用户数。
提前致谢
答案 0 :(得分:3)
如果我正确理解您的问题(您想知道具有不同ID或不同名称的用户数),您可以执行以下操作:
int uniqueByIdCount = list.Select(x => x.Id).Distinct().Count();
int uniqueByNameCount = list.Select(x => x.Name).Distinct().Count();
答案 1 :(得分:0)
这应该做你想要的:
int Unique(string parameterName)
{
List<Whatever> subList = new List<Whatever>();
if (parameterName == "Id")
{
subList = data.Select(x => x.Id);
} else {
subList = data.Select(x => x.Name)
}
return subList.Distinct().Count();
}
答案 2 :(得分:0)
快速脏方法如下(假设field
保存名称)
var param=Expression.Parameter(typeof(User),"i");
var property=Expression.Property(param,field);
var select=Expression.Convert(property,typeof(Object));
var result=items.GroupBy ((Func<User,object>)Expression.Lambda(select,param).Compile()).Count();
结果现在将包含您的答案
答案 3 :(得分:0)
@ajalexander的变体回答使它成为一条指令。
string parameter = "name";
int uniqueCount = list.Select(x => parameter == "Id" ? x.Id : x.Name).Distinct().Count();
答案 4 :(得分:0)
对于在LINQ中执行此操作的简短通用方法,我建议:
list.GroupBy(user=>user.Id).Count();
list.GroupBy(user=>user.Name).Count();
当然,如果您不需要将参数名称作为字符串传递,那就是。你也可以免费获得一些类型的安全性。