假设我有两个对象:
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属性来解决,但不确定如何。
如果我使用存储过程,我会遇到同样的问题。我正在尝试构建一个查询工具,因此很多变量都不会提前知道。
答案 0 :(得分:1)
您需要创建一个扁平形状的数据对象来捕获结果,然后将这些结果投影到您想要的任何形状。
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的非编译器检查世界会更恰当地解决这个问题。 To wit
string queryString =
"SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");