IEnumerable тип коллекции, получение нулевых значений - PullRequest
1 голос
/ 06 ноября 2011

С помощью StackOverflow сегодня я получил построенный слой данных, который возвращает данные из моего XML-файла на уровень бизнес-логики. Тем не менее, я не могу получить данные из слоя бизнес-объектов. Все значения равны нулю. Извините, чтобы быть таким новичком .... Заранее спасибо.

Уровень бизнес-логики:

public void getCustDetails(string customerId)
{                          
    DLGetCustomers obj = new DLGetCustomers();
    obj.getCustDetails(customerId);
    AccountDetails obj1 = new AccountDetails();
    FirstName = obj1.Fname;
    LastName = obj1.Lname;
    SSN = obj1.Ssn;
    Dob = Convert.ToDateTime(obj1.Dob);
    CustomerId = Convert.ToInt32(obj1.Custid);
    TimeSpan ts = DateTime.Now - Convert.ToDateTime(Dob);
    Age = ts.Days / 365;
}

Уровень доступа к данным:

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 Ответ

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

Эта строка:

AccountDetails obj1 = new AccountDetails();

Просто устанавливает obj1 на новый экземпляр AccountDetails, который будет полон пустых строк.

Вам, вероятно, нужно изменить getCustDetails в вашем DAL, чтобы он возвращал экземпляр AccountDetails вместо IEnumerable, и установите obj1 в:

AccountDetails obj1 = obj.getCustDetails(customerId);

В вашем DAL:

public 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.FirstOrDefault();
} 

Обратите внимание, что если ваш DAL не может найти учетную запись с указанным customerId, он вернет null (значение по умолчанию для класса). Вам нужно будет проверить возвращаемое значение против нуля перед использованием, если вы не хотите, чтобы NullReferenceException было выброшено в такой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...