使用LINQ按字母顺序分组记录的最有效方法

时间:2013-01-10 21:01:36

标签: linq entity-framework

我正在尝试创建一个rolodex风格的分组,其中包含大量与LINQ&实体框架。

我有一个Contacts模型,需要包含在GroupedContacts模型中,该模型包含Initial属性。我想,如果信件中存在记录,则要填写的初始属性和要填充的Contacts列表: -

public char Initial { get; set; }
public List<Contacts> Contacts { get; set; }

任何人都可以借给我他们的LINQ级别的LINQ吗?

为了完整性,我的联系人get目前看起来像这样: -

using (var ctx = new atomicEntities())
            {
                var contacts = from c in ctx.Contacts
                               where c.ClientId == clientid
                               select c;
                return contacts.ToList();
            }

一如既往的帮助表示赞赏:)

修改

我几次重读了我的问题,觉得它有点模糊。为了澄清,我正在尝试创建这样的数据: -

{
        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'
                }
            }
        ]
    }

1 个答案:

答案 0 :(得分:3)

看看是否有效:

contacts
.GroupBy(c=>string.IsNullOrEmpty(c.Name) ? '' : c.Name[0])
.Select(g=>new GroupedContacts {Initial = g.Key, Contacts = g.ToList()});

这将按Name属性的第一个字符分组(如果Name为空或null,则为空字符串),并将分组键作为Initial返回以及该组中的联系人列表Contacts

相关问题