0

私は次のLINQを持っています:-

private static IEnumerable<AlphabetisedContact> _getGroupedContacts(int clientid)
{
  return _getLiteContacts(clientid).GroupBy(c => c.Name[0]).Select(
  g => new AlphabetisedContact { Initial = g.Key, Contacts = g.ToList() }).OrderBy(g => g.Initial);  }

文字を除くすべての連絡先を返すのはどれaですか? 何か不足していますか?

編集現在、次のようなものを返します:-

    [{
        "$id": "1",
        "Initial": "B",
        "Contacts": [{
            "$id": "2",
            "ContactId": 12,
            "Name": "Bryan Chiney",
            "PrimaryContact": {
                "$id": "3",
                "Type": "Email",
                "Value": "bazrith@hotmail.com"
            },
            "Avatar": "/images/avatars/default.jpg",
            "UserId": null
        }, {
            "$id": "4",
            "ContactId": 22,
            "Name": "Bryan Billbags",
            "PrimaryContact": {
                "$id": "5",
                "Type": "Email",
                "Value": "bryan@atomic.com"
            },
            "Avatar": "/images/avatars/contacts/randomiser/1.jpg",
            "UserId": 15
        },
...

最初のInitialブロックには私のA連絡先の数が含まれていると思います...たとえば、新しい連絡先を名前Bryn McWinkawonkで追加すると、彼は表示されますが、表示されAlice Alikemenません...?

編集 _getLiteContacts()呼び出しは、渡されたパラメータでデータベースにアクセスします:-

private static IEnumerable<LiteContact> _getLiteContacts(int clientid)
        {
            return _getContacts(clientid).Select(c => new LiteContact()
                    { ContactId = c.ContactId, ContactType = Enum.GetName(typeof (ContactTypeObject.Type), c.Type), Name = c.Name, PrimaryContact = _marshallFirstContactDetail(c.ContactId), 
                        Avatar = c.Avatar, UserId = c.UserId }).ToList();
        }

_getContacts():-

private static IEnumerable<Contact> _getContacts(int clientid)
        {
            using (var ctx = new atomicEntities())
            {
                var contacts = from c in ctx.Contacts
                               where c.ClientId == clientid
                               select c;
                return contacts.ToList();
            }
        }

_marshallFirstContactDetail():-

private static Model.Contact.ContactDetail _marshallFirstContactDetail(int contact)
        {
            return _marshallContactDetails(contact).FirstOrDefault();
        }

_marshallContactDetails():-

private static IEnumerable<Model.Contact.ContactDetail> _marshallContactDetails(int contact)
        {
            using (var ctx = new atomicEntities())
            {
                var o = from d in ctx.ContactDetails
                        join cd in ctx.ContactDetailTypes on d.ContactDetailTypeId equals cd.ContactDetailTypeId
                        where d.ContactId == contact
                        select new Model.Contact.ContactDetail {Type = cd.Description, Value = d.Description};
                return o.ToList();
            } 
        }

サンプルデータ

contact_id  client_id   contact_name    contact_type
8   22  Cain Allan  2
9   23  Bazrith Banners 2
10  22  Spencer Grep    1
12  22  Bryan Chiney    1
13  22  Dave Carter 4
15  22  Steve Tite  8
16  22  Henry Laythorpe 8
17  22  Chris Barker    8
18  22  Simon Cox   2
19  22  Russell Jacobs  1
20  22  John Wyndham    2
21  22  Isabel March    5
22  22  Bryan Billbags  2
23  22  Stu Plum    2
24  22  Pete Sorensen   7
25  22  Tom Francis 1
26  22  Rich McCormick  1
27  22  Tim Cain    4
28  22  Alex Ray-Harvey 1
29  22  Ryan Bennett    1
30  22  Alice Griswald  3
31  22  Archibald Smyth 3
32  22  Benjamin Franklin   5

助けていただければ幸いです。

4

1 に答える 1

0

わかった。まず、この質問を見るのに時間を割いた人に大きな謝罪をします。問題は、ページングが行われたこの上のレイヤーにあることがわかりました。GetGroupedContacts次のように(=> _getGroupedContacts())の結果に対して LINQ の一部が実行されました。

GetGroupedContacts().Take(1000).Skip(1)

これは当然、常に最初の結果をスキップします。

完全なスパナドゥーバート サインオフ!

于 2013-02-04T21:07:12.597 に答える