私は3層アプリケーションに取り組んでいます。また、データアクセスにLINQtoSQLを使用しています。
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;
}
プレゼンテーション層では、DatagridViewのデータソースにIEnumerableを使用しているだけです。
「情報」のような別のテーブルとそれに対応するテーブルがある場合はどうなりcustomerDAL.getInfo()
ますか?次に、Business-Layerのメソッドで結合クエリを作成します。私はそれを次のように想像しました:
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ファイルにあるわけではありません。何が間違っている可能性がありますか?