使用LINQ按字母顺序对记录进行分组的最有效方法
我正在尝试使用LINQ&Entity Framework创建一个rolodex样式的分组,其中包含大量联系人列表 我有一个使用LINQ按字母顺序对记录进行分组的最有效方法,linq,entity-framework,Linq,Entity Framework,我正在尝试使用LINQ&Entity Framework创建一个rolodex样式的分组,其中包含大量联系人列表 我有一个Contacts模型,需要包装在GroupedContacts模型中,该模型包含一个Initial属性。如果存在信函记录,我希望填写初始属性,并填写中的联系人列表:- public char Initial { get; set; } public List<Contacts> Contacts { get; set; } 一如既往,我们感谢您的帮助:) 编辑
Contacts
模型,需要包装在GroupedContacts
模型中,该模型包含一个Initial
属性。如果存在信函记录,我希望填写初始属性,并填写中的联系人
列表:-
public char Initial { get; set; }
public List<Contacts> Contacts { get; set; }
一如既往,我们感谢您的帮助:)
编辑
我把我的问题重读了几遍,觉得有点模糊。为了澄清,我试图创建如下数据:-
{
initial: 'c',
contacts: [
{
name: 'Charlie Chaplin',
primaryContact: {
type: 'phone',
value: '0123456789'
}
},
{
name: 'Charlie Sheen',
primaryContact: {
type: 'email',
value: 'sheen@charliepower.com'
}
},
{
name: 'Colin Caterpiller',
primaryContact: {
type: 'email',
value: 'colin@caterpiller.com'
}
}
]
}
看看这是否有效:
contacts
.GroupBy(c=>string.IsNullOrEmpty(c.Name) ? '' : c.Name[0])
.Select(g=>new GroupedContacts {Initial = g.Key, Contacts = g.ToList()});
这将按Name
属性的第一个字符分组(如果Name
为空或null
,则为空字符串),并将分组键返回为首字母,将该组中的联系人列表返回为联系人查看此操作是否有效:
contacts
.GroupBy(c=>string.IsNullOrEmpty(c.Name) ? '' : c.Name[0])
.Select(g=>new GroupedContacts {Initial = g.Key, Contacts = g.ToList()});
这将按Name
属性的第一个字符分组(如果Name
为空或null
,则为空字符串),并返回分组键作为首字母,返回该组中的联系人列表作为联系人
解释您的联系人
类。您想按哪个属性分组?@HamletHakobyan,请查看最新编辑-这可能会解释得更详细一些…解释您的联系人
类。您想按哪个属性分组?@HamletHakobyan,请查看最新编辑-这可能会解释更多…+1,但我认为OP需要GroupedContacts对象,而不是匿名对象+1优秀、快速的响应。让我试一试,必要时我会发回/标记答案。谢谢大家;)+1但我认为OP需要GroupedContacts对象,而不是匿名1+1优秀、快速的响应。让我试一试,必要时我会发回/标记答案。谢谢大家;)