2011-06-19 34 views
1

我有下面的代码工作,并得到我的单个实体的数据。Silverlight使用实体LINQ加入

LoadOperation<TimeForm> loadoperation = _cc.Load(_cc.GetTimeFormsQuery() 
      .Where(o => o.Start>= weekrange.startdate 
        && o.End<= weekrange.enddate 
        && o.USERID== "TEST")); 

不过,我有3个表,其连接到这个赛马表,在SQL我的查询看起来是这样的:

SELECT T* FROM TimeForm 
INNER JOIN CLIENT ON TimeForm.CODEID= CLIENT.CODEID 
INNER JOIN RATE ON TimeForm.RATEID= RATE.RATEID 
INNER JOIN TASK ON TimeForm.TASKID = TASK.TASKID 

这怎么有可能与上述语法?我需要这些表中的一些值。

回答

0

尝试是这样的:

var query = context.TimeForm. 
      Join(context.CLIENT, 
      t => t.CODEID, c => c.CODEID , 
      (t, c) => new 
      { 
       PropertyA = t.ColumnA, 
       PropertyB = c.ColumnB      
      }).Join(context.RATE, 
        b => b.RATEID, r => r.RATEID, 
        (b, r) => new 
        { 
         PropertyC = b.ColumnC, 
         PropertyD = r.ColumnD        
        }).Join(context.TASK, 
          x => x.TASKID, t => t.TASKID, 
          (x,t) => new 
          { 
           PropertyE = x.ColumnE, 
           PropertyF = t.ColumnF 
          }); 

PropertyA,B等只是存在于类型的属性,您可以使用它存储数据从查询返回。而ColumnA,B等等是连接中涉及的表中存在的列。您可以用查询中的实际值替换这些值。

0

您需要转到域服务文件(其中定义了GetTimeFormsQuery())。它会是这个样子:

public IQueryable<TimeForm> GetTimeForms() { 
    return this.Context.TimeForm; 
} 

,并添加到它,所以它是这样的:

public IQueryable<TimeForm> GetTimeForms() { 
    return this.Context.TimeForm 
     .Include("Client") // Assuming your property to see the client is called "Client" 
     .Include("Rate") // Same for "Rate" 
     .Include("Task"); // and "Task 
} 

或任何导航属性被称为在TimeFrom实体。

Silverlight不会执行延迟加载,因此您必须在域服务的查询中明确包含这些属性。另外,在接受开始和结束日期以及userid的域服务上创建一个额外的方法可能是明智的做法,这样您就不会每次都将整个表格拉过来。

public IQueryable<TimeForm> GetTimeFormsWithStartAndEnd(DateTime start, DateTime end, string userId) { 
    return this.Context.TimeForm 
     .Include("Client") // Assuming your property to see the client is called "Client" 
     .Include("Rate") // Same for "Rate" 
     .Include("Task") // and "Task 
     .Where(o => o.Start>= start 
       && o.End<= end 
       && o.USERID== userId)); 

} 

后重建你的web项目,你必须在这些3作为参数你的Silverlight一个名为GetTimeFormsWithStartAndEndQuery方法。

Goodluck!