バックグラウンド
現在、RIA サービスを使用する C# Silverlight ビジネス アプリケーションを使用しています。アプリケーションは、ADO.NET Entity Framework とドメイン サービス クラスを使用して ASP.NET でホストされ、SQL Server データベースの読み取りと書き込みを行います。
RIA クラスはテーブル間の複数の をサポートしていないためJOIN
、ドメイン サービスの一部として LINQ をJOIN
すべてのテーブルにまとめて実装し、結果を返す必要がありました。
問題
foreach
返されたオブジェクトのリストでループを使用しようとすると、エラー メッセージが表示されます。
GetEnumerator のパブリック定義が含まれていません
このメソッドからデータを取得するためのオプションは何ですか?
ほとんどの場合、必要なオブジェクトは 1 つだけなので、メソッドを変更して最初の結果を選択し、単一のオブジェクトを返すことができます。
このメソッドはドメイン サービス クラスに存在します。このメソッドは、コンテキストを定義してから、Silverlight クライアントでメソッドを呼び出します。
Silverlight クライアントからのメソッド呼び出し
var context = dds.DomainContext as InmZenDomainContext;
context.GetJobImagesQuery(imageJob.JobID.ToString())
サーバー側の Linq クエリ メソッド (ドメイン サービス クラス内に存在)
public List<Image> GetJobImages(string jobGuid)
{
var query =
(
from j in Context.Job
orderby (j.ShortCode)
where j.JobID.Equals(jobGuid)
join a in Context.Audit //.Distinct()
on j.JobID equals a.Job.JobID
join i in Context.Image
on a.Image.JobID equals i.JobID
//join s in Context.States
//on z.States.StateID equals s.StateID
select new Image
{
//ShortCode = j.ShortCode,
HighResUrl = i.HighResUrl,
LowResUrl = i.LowResUrl,
UploadDate = i.UploadDate
}
).ToList();
return query;
}
呼び出し方法
var context = dds.DomainContext as InmZenDomainContext;
foreach (var item in context.GetJobImagesQuery(imageJob.JobID.ToString()))
{
}
GetJobImagesQuery
宣言 (生成されたコード ファイル - .Web.g.cs 内に存在):
/// <summary>
/// Returns an EntityQuery for query operation 'GetJobImages'.
/// </summary>
public EntityQuery<Image> GetJobImagesQuery(string jobGuid)
{
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("jobGuid", jobGuid);
return base.CreateQuery<Image>("GetJobImages", parameters, false, true);
}