2012-04-18 124 views
2

我有一個Web服務,我打電話來做一個基於電子郵件,名字和姓氏的欺騙檢查。我從業務層返回的對象非常大,並且擁有比我需要傳回的更多數據。在我的web服務函數中,我只想通過JSON傳回10個字段。而不是用這10個字段創建一個新類,我正在尋找循環訪問我的大型返回對象,而只是用這10個字段創建一個匿名對象的列表或數組。C#來自循環的匿名對象匿名數組

我知道我可以做匿名對象的匿名數組手動像這樣

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"   } 
}; 

我的問題是,我想這樣做確切的事情,除了通過我的大對象循環和僅拉出場I需要返回。

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);  
    } 
} 

如果我不需要,我真的不想再增加那些私人課程。任何幫助,將不勝感激。

+1

有什麼反對讓另一個類? – AakashM 2012-04-18 13:04:33

+0

這不是我的應用程序,我只想使用一次性類,因爲它只用於這一個功能,沒有其他地方。 – vipergtsrz 2012-04-20 18:47:07

回答

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() 
            }); 
+0

如果您使用Linq,則可以使用Take()和Skip()函數進行分頁。 – 2012-04-18 13:19:23

+2

@LajosArpad - 確實如此,但我沒有看到與問題有關的事情。 – Oded 2012-04-18 13:20:09

+0

我不認爲這是我所問的。我想知道如何在循環中創建一個匿名列表。所以我想創建空列表,然後從循環內部添加對象到列表中。 – vipergtsrz 2012-04-24 13:26:30