Приложение C # .Net WinForms: анонимная коллекция - как преобразовать тип возвращаемого значения - PullRequest
2 голосов
/ 06 ноября 2011

Похоже, это проблема записи для меня. У меня снова возникают проблемы с типом приведения, когда я использую анонимную коллекцию. Мой запрос из файла XML возвращает коллекцию строковых значений. Я пытаюсь вернуть эти значения из уровня доступа к данным на уровень бизнес-логики. Заранее спасибо.

    public string[] getCustDetails(string customerId)
    {
        //Pulls customer information for selected customer
        var doc = XDocument.Load("Portfolio.xml");
        var custRecord = from account in doc.Descendants("acct")
                         let acct = account.Element("acct")
                         where (string)account.Attribute("custid").Value == customerId
                         select new
                         {
                             Fname = (string)account.Attribute("fname").Value,
                             Lname = (string)account.Attribute("lname").Value,
                             Ssn = (string)account.Attribute("ssn").Value,
                             Dob = (string)account.Attribute("dob").Value,
                             Custid = (string)account.Attribute("custid").Value
                         };
return ?????

    }

Ответы [ 3 ]

3 голосов
/ 06 ноября 2011

Вы не можете использовать анонимные типы, являющиеся параметрами метода или возвращаемого типа.

Я предлагаю создать простой класс с нужными вам свойствами и использовать его вместо анонимного типа.

public class AccountDetails
{
  public string FName { get; set; }
  public string LName { get; set; }
  public string Ssn { get; set; }
  public string Dob { get; set; }
  public string Custid { get; set; }
}

public IEnumerable<AccountDetails> getCustDetails(string customerId)
{
    //Pulls customer information for selected customer
    var doc = XDocument.Load("Portfolio.xml");
    var custRecords = from account in doc.Descendants("acct")
                     let acct = account.Element("acct")
                     where (string)account.Attribute("custid").Value == customerId
                     select new AccountDetails
                     {
                         Fname = (string)account.Attribute("fname").Value,
                         Lname = (string)account.Attribute("lname").Value,
                         Ssn = (string)account.Attribute("ssn").Value,
                         Dob = (string)account.Attribute("dob").Value,
                         Custid = (string)account.Attribute("custid").Value
                     };

    return custRecords;
}
1 голос
/ 06 ноября 2011

создать новый класс для требования и вернуть его в виде списка ...

    public MyClass[] getCustDetails(string customerId)
    {
        //Pulls customer information for selected customer
        var doc = XDocument.Load("Portfolio.xml");
        var custRecord = (from account in doc.Descendants("acct")
                         let acct = account.Element("acct")
                         where (string)account.Attribute("custid").Value == customerId
                         select new MyClass
                         {
                             Fname = (string)account.Attribute("fname").Value,
                             Lname = (string)account.Attribute("lname").Value,
                             Ssn = (string)account.Attribute("ssn").Value,
                             Dob = (string)account.Attribute("dob").Value,
                             Custid = (string)account.Attribute("custid").Value
                         }).ToArray();
   return custRecord;

    }

определите свой класс как

public class MyClass
{
    public string Fname  { get; set; }
    public string Lname { get; set; }
    public string Ssn { get; set; }
    public string Dob { get; set; }
    public string Custid { get; set; }
}
0 голосов
/ 06 ноября 2011

Я бы создал новый класс, содержащий следующие свойства.

 string Fname
 string Lname
 string Ssn
 string Dob
 string Custid

Затем верните этот тип из вашего метода getCustDetails ()

...