实体框架-用LINQ按字母顺序分组记录的最有效方法



我正在尝试创建一个带有大型联系人列表的rolodex风格的分组。实体框架。

我有一个Contacts模型,它需要包装在包含Initial属性的GroupedContacts模型中。我想,在存在信件记录的地方,要填充初始属性和要填充的Contacts列表:-

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

谁能借给我他们的禅宗水平的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'
                }
            }
        ]
    }

看看是否有效:

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

相关内容

  • 没有找到相关文章

最新更新