背景
目前我有一个使用 RIA 服务的 C# Silverlight 业务应用程序。该应用程序托管在 ASP.NET 中,使用 ADO.NET 实体框架和域服务类来读取和写入 SQL Server 数据库。
由于 RIA 类不支持JOIN
表之间的多个 s,因此有必要将 LINQ 作为域服务的一部分实现到JOIN
所有表并返回结果。
问题
当我尝试foreach
在返回的对象列表上使用循环时收到错误消息:
不包含 GetEnumerator 的公共定义
从这种方法中获取数据有哪些选择?
大多数时候我只需要一个对象,所以我可以修改方法来选择第一个结果并返回一个对象。
此方法存在于域服务类中。此方法定义上下文,然后调用 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);
}