2012-04-18 2 views
2

У меня есть веб-сервис, который я вызываю, который выполняет проверку обмана на основе электронной почты, firstName и lastName. Объект, который я возвращаю с бизнес-уровня, очень велик и имеет больше данных, чем мне нужно передать обратно. В моей функции веб-службы я хотел бы передать только 10 полей через JSON. Вместо того, чтобы создавать новый класс с этими 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"   } 
}; 

Моей проблема заключается в том, что я хочу сделать это точно вещь кроме перекручивания через мой большой объект и только вытаскивая поля ввода необходимо вернуться.

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

+0

Это не мое приложение, и я хотел просто использовать одноразовый класс, потому что он используется только для этой функции, а не где-то еще. – vipergtsrz

ответ

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() для подкачки. –

+2

@LajosArpad - Правда, хотя я не вижу, что это касается вопроса. – Oded

+0

Я не думаю, что это делает то, о чем я просил. Я хочу знать, как сделать анонимный список изнутри цикла. Поэтому я хочу создать пустой список, а затем добавить объекты в этот список из цикла. – vipergtsrz

Смежные вопросы