2010-09-04 68 views
0

比方說,我有兩個對象:的executeQuery <>與層次結構對象和LINQ to SQL

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); 

這裏的問題是,家庭街道和所在城市不填充。有什麼辦法可以讓它工作?我認爲它可以通過使用關聯屬性解決,但不知道如何。

我有同樣的問題,如果我使用存儲過程。我試圖建立一個查詢工具,所以很多變量都未提前知道。

回答

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"); 
+0

謝謝大衛。有沒有辦法可以添加 字符串Home_street {get; set;} string Home_city {get; set;} 動態的Person對象?或動態創建整個PersonQueryResult類?我知道這是可能的4.0,但我使用3.5。 – Johnny 2010-09-04 21:24:56