public class ContactModel
{
public string PeopleName { get; set; }
public string PhoneNumber { get; set; }
}
List<ContactModel> contacts =new List<ContactModel>();
Contacts.Add(new ContactModel{PeopleName="Vijay Singh",PhoneNumber="9878987869"});
Contacts.Add(new ContactModel{PeopleName="Anuradha Patel",PhoneNumber="9878987869"});
Contacts.Add(new ContactModel{PeopleName="Binay Dixit",PhoneNumber="9878987869"});
我想在联系人姓名首字母上获得List<char>
,例如列表数据=> V,A,B
如何通过LINQ在C#中获得它?
答案 0 :(得分:1)
只需执行以下操作:
var charList = contacts.Select(c => c.PeopleName.First()).ToList();
如果您需要第一个字符列表Distinct
,请执行以下操作:
var charList = contacts.Select(c => c.PeopleName.First()).Distinct().ToList();
答案 1 :(得分:0)
使用LINQ的group ... by
运算符(或GroupBy()
方法)操作集合,并使用ToDictionary()
将IEnumerable<T>
转换为Dictionaty<T1, T2>
和{ {1}}方法,该方法接受一个ToList()
并返回一个“列表:
LINQ运算符:
IEnumerable<T>
LINQ方法:
Dictionary<char, List<ContactModel>> = (from contact in Contacts
group contact by contact.PeopleName[0])
).ToDictionary(g => g.Key, g => g.ToList());
答案 2 :(得分:0)
不清楚是否需要分组还是只需要首字符列表。
分组依据 如果您要根据“第一个字符”进行分组,则可以执行以下操作。
var result = contacts.GroupBy(x=>x.PeopleName.First());
您的输出如下。
如果您希望不区分大小写地执行相同操作,则可以
var result = contacts.GroupBy(x=>x.PeopleName.First().ToString(),StringComparer.InvariantCultureIgnoreCase);
如果仅在查找第一个字符列表,则可以执行以下操作。
var result = contacts.GroupBy(x=>x.PeopleName.First()).Select(x=>x.Key);
由于您是按“首字母”分组的,因此重复的键将不存在,或者消除了一些注释中所要求的区别。 样本输出,