我正在研究3層應用程序。此外,我正在使用LINQ to SQL進行數據訪問。LINQ連接方法的正確返回值是什麼?
數據層具有返回客戶的表格的函數:
public Table<Customer> getCustomers()
{
DataContext context = new DataContext();
Table<Customer> customerTable = context.GetTable<Customer>();
return customerTable;
}
它提供給業務層,其中結果被傳遞給表示層爲IEnumerable<Customer>
:
public IEnumerable<Customer> getCustomers()
{
CustomerDAL customerDAL = new CustomerDAL();
return from c in customerDAL.getCustomers() select c;
}
在表示層中,我簡單地使用IEnumerable作爲DatagridView的DataSource。
如果我有另一個表如「信息」和表customerDAL.getInfo()
表怎麼辦?現在我想在業務層的方法中進行連接查詢。我想像是這樣的:
public IEnumerable<Customer> getCustomerInfo()
{
CustomerDAL customerDAL = new CustomerDAL();
return from c in customerDAL.getCustomers()
join i in customerDAL.getInfo() on c.id equals i.InfoID
select new { c.id, c.Name, i.DateTime, i.Project };
}
問題是IEnumerable需要對象的類型。我的返回值不再是客戶表,而是客戶表和信息表的組合。我是否正確?這裏的返回值是正確的選擇?
你的建議後,我創建了一個自定義類,CustomerInfo.cs
:
public class CustomerInfo
{
string name { get; set; }
long id { get; set; }
string dateTime { get; set; }
string project { get; set; }
public CustomerInfo(long _id, string _name, string _date, string _project)
{
name = _name;
id = _id;
dateTime = _date;
project = _project;
}
}
然後我打電話完全一樣的方法,由Reed描述。但是,當我設置DataSource的表示層中我得到異常:
The query contains references to items defined on a different data context.
其實這是不正確的所有實體類是在同一個.dbml文件。什麼可能是錯的?
這是否意味着我正在用IEnumerables填充的自定義類上運行LINQ查詢,並且可以使用返回值作爲DataSource? – Prot