ExecuteQuery <> с объектами иерархии и LINQ to SQL - PullRequest
0 голосов
/ 04 сентября 2010

Допустим, у меня есть два объекта:

public class Person{
     string Name { get; set;}
     Address Home { get; set;}
}

public class Address{
     string Street{ get; set;}
     string City { get; set;}
}


    string sql = "Select Name, Home_street, Home_city from user";
    var results = dc.ExecuteQuery<Person>(sql);

Проблема здесь в том, что Главная улица и родной город не заселены.Есть ли способ, которым я могу заставить это работать?Я думаю, что это можно решить с помощью атрибута Association, но я не уверен, как.

У меня та же проблема, если я использую хранимую процедуруЯ пытаюсь создать инструмент запросов, чтобы многие переменные не были известны заранее.

1 Ответ

1 голос
/ 04 сентября 2010

Вам нужно сделать объект данных с плоской формой, чтобы поймать результаты, а затем спроецировать эти результаты в любую нужную форму.

public class PersonQueryResult
{
  string Name {get;set;}
  string Home_street {get;set;}
  string Home_city {get;set;}
}

string sql = "Select Name, Home_street, Home_city from user";
List<PersonQueryResult> results = dc.ExecuteQuery<PersoneQueryResult(sql).ToList();
List<Person> projectedResults = results.Select(pqr => new Person()
  {
    Name = pqr.Name,
    Home = new Address()
    {
      Street = pqr.Home_street,
      City = pqr.Home_city
    }
  }
).ToList();

Что бы вы сделали с динамически генерируемыми классами, еслиу тебя были они?Это не значит, что можно написать проверенный компилятором код против них.

Я думаю, что мир ADO.NET, не проверенный компилятором, решит эту проблему более подходящим образом. Со .

string queryString = 
  "SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
...