我正在开发一个 3 层应用程序。我也使用 LINQ to SQL 进行数据访问。
DataLayer 有一个返回客户表的函数:
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 的数据源。
如果我有另一个表格,如“信息”和相应的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 描述的完全相同的方法。但是在表示层中,当我设置数据源时,我得到了异常:
The query contains references to items defined on a different data context.
实际上,并非所有实体类都在同一个 .dbml 文件中。有什么问题?