我试图通过WCF RIA服务使用LINQ将两个查询合并在一起。
每次我尝试查询从LoadOperation创建的两个列表时,我都不会得到任何结果。
这是我的代码:
LoadOperation<BTSLead_vw> lo = bictx.Load<BTSLead_vw>(bictx.GetBTSAttendedQuery().Take(2000));
List<BTSLead_vw> btsattended = lo.Entities.ToList<BTSLead_vw>();
LoadOperation<SyStudentApps> c2000lo = c2000ctx.Load<SyStudentApps>(c2000ctx.GetSyStudentAppsQuery().Take(2000));
List<SyStudentApps> c2000apps = c2000lo.Entities.ToList<SyStudentApps>();
var query = from bts in btsattended
join apps in c2000apps on bts.SystemLeadID equals apps.SyStudentID
select new BTSMasterQuery
{
SyStudentID = apps.SyStudentID,
EventDate = (DateTime)bts.EventDate,
StartTime = (DateTime)bts.StartTime,
SchoolStatus = apps.SchoolStatus,
LeadCat = apps.LeadCat,
StuNum = apps.StuNum,
AppRecDate = Convert.ToDateTime("11/01/2001")/*(from enroll in c2000ctx.GetAdEnrollsQuery()
where enroll.SyStudentID == apps.SyStudentID
select enroll.AppRecDate).First()*/,
TourAttended = (
bts.InterestTitle == "Recording Arts Converted Group" ? "Recording Arts" :
bts.InterestTitle == "Digital Arts Converted Group" ? "Digital Arts and Design" :
bts.InterestTitle == "Unclear Converted Group" ? "Unknown" :
bts.InterestTitle == "Film and Video Converted Group" ? "Film and Video" :
bts.InterestTitle == "Show Production Converted Group" ? "Show Production" :
bts.InterestTitle == "Gaming Converted Group" ? "Gaming" :
bts.InterestTitle == "Entertainment Business Converted Group" ? "Entertainment Business" : bts.InterestTitle),
Gender = apps.Gender,
Ethnicity = apps.Ethnicity
};
this.radGridView1.ItemsSource = query;
我做过几十次搜索,我知道它与List绑定到GridView之前没有加载的数据有关,但是我不知道如何使用两个LoadOperations作为其中一部分来解决这个问题。查询。
谢谢,
盖瑞特
答案 0 :(得分:1)
您正在设置异步加载,但没有响应加载完成事件,也没有使用加载操作对象的实体成员(lo和c2000lo)。
您无法在数据来自服务器之前查询数据。在您的示例中,您必须等待两个加载操作完成才能加入lo.Entities和c2000lo.Entities的结果。然而,这是一个糟糕的方式......
简化此操作的常用方法是在服务器上进行连接和提取,并返回适当数据类型的IEnumerable,以获得所需的实际结果。使用Silverlight,您始终希望最大限度地减少传输到客户端的数据量。
您可以在加载完成之前执行加载操作(如lo
)并绑定到其Entities
成员,因为Entities
只是一个容器,会在数据时通知绑定加载如:
LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());
CustomerGrid.ItemsSource = loadOp.Entities;