2

電子メール、firstName、および lastName に基づいて重複チェックを行う Web サービスを呼び出しています。ビジネス層から返されたオブジェクトは非常に大きく、返す必要のあるデータよりもはるかに多くのデータが含まれています。私の Web サービス関数では、JSON 経由で 10 個のフィールドのみを返したいと考えています。これらの 10 個のフィールドを持つ新しいクラスを作成する代わりに、大きな戻りオブジェクトをループして、代わりにそれらの 10 個のフィールドを持つ匿名オブジェクトのリストまたは配列を作成しようとしました。

このように匿名オブジェクトの匿名配列を手動で作成できることを知っています

obj.DataSource = new[]
{
    new {  Text = "Silverlight",  Count = 10,  Link = "/Tags/Silverlight"  },
    new {  Text = "IIS 7",        Count = 11,  Link = "http://iis.net"     }, 
    new {  Text = "IE 8",         Count = 12,  Link = "/Tags/IE8"          }, 
    new {  Text = "C#",           Count = 13,  Link = "/Tags/C#"           },
    new {  Text = "Azure",        Count = 13,  Link = "?Tag=Azure"         } 
};

私の問題は、大きなオブジェクトをループして、返す必要があるフィールドのみを引き出すことを除いて、まさにそのことをしたいということです。

private class DupeReturn
{
    public string FirstName;
    public string LastName;
    public string Phone;
    public string Owner;
    public string Address;
    public string City;
    public string State;
    public string Zip;
    public string LastModified;
}

[WebMethod]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string CheckForDupes(string Email, string FirstName, string LastName)
{
    contact[] list = Services.Contact.GetDupes(Email, FirstName, LastName);
    if (list != null && list.Length > 0)
    {
        List<DupeReturn> dupes = new List<DupeReturn> { };
        foreach (contact i in list)
        {
            DupeReturn currentObj = new DupeReturn
            {
                FirstName = i.firstname,
                LastName = i.lastname,
                Phone = i.telephone1,
                Owner = i.ownerid.ToString(),
                Address = i.address1_line1,
                City = i.address1_city,
                State = i.address1_stateorprovince,
                Zip = i.address1_postalcode,
                LastModified = i.ctca_lastactivityon.ToString()
            };
            dupes.Add(currentObj);
        }
        return Newtonsoft.Json.JsonConvert.SerializeObject(dupes);    
    }
}

必要がなければ、その追加のプライベート クラスを作成する必要はありません。どんな助けでも大歓迎です。

4

1 に答える 1

6

LINQ を使用すると、匿名型のリストを作成できます。

var dupes = list.Select(i => new { FirstName = i.firstname,
                                   LastName = i.lastname,
                                   Phone = i.telephone1,
                                   Owner = i.ownerid.ToString(),
                                   Address = i.address1_line1,
                                   City = i.address1_city,
                                   State = i.address1_stateorprovince,
                                   Zip = i.address1_postalcode,
                                   LastModified = i.ctca_lastactivityon.ToString()
                                    });
于 2012-04-18T13:05:46.717 に答える