2011-08-23 203 views
1

我可以用RIA服务查询的一些帮助,我现在一直在努力...RIA服务查询

人有一个DailyScore的集合。

我希望能够产生一个在Person和DailyScore上都被过滤的查询。

DateTime start = ... 
DateTime end = ... 

var personQuery = context.GetPersonQuery().Skip.(10).Take(10) 
var scoresQuery = from s in ctx.GetDailyScoresForPeriod(start, end) 
         where personQuery.Contains(s.Person) 
         select s; 

...load the scoresQuery 

我会最好要加载指定的相应DailyScores period.n我们可以假定所有的“包括”到位太Person对象。

RIA Services可能吗?如果是这样,有人可以给我正确的方式去解决它,如果不是有任何解决办法?

我觉得这是一个简单的请求,所以希望这很容易。

谢谢提前, Shane。

另外,有人可以指点我一个关于在RIA服务的客户端使用EntityQueries的规则的良好在线资源吗?我一直在努力寻找这样的事情。

回答

3

实际上,您正在尝试执行的查询不受支持。您不能使用Contains,Any以及需要过滤集合中数据的类似构造。 在这些情况下,你有两个选择:

  • 分别执行这两个查询,然后筛选客户端上的数据。此方法存在性能问题,因为您正在从服务器检索所有数据,然后将其过滤出来。在你的情况下,你会这样:

    var personQuery = context.GetPersonQuery().Skip.(10).Take(10); 
    var scoresQuery = context.GetDailyScoresForPeriodQuery(start, end); 
    
    // Load both queries and then: 
    scores.Where(s => persons.Contains(s.Person)) 
    
  • 在服务器中执行查询。这种方法更高效,但您需要定义一种方法来筛选同一查询中的人员。在你的情况,如果你只是想其ID的下降在一定范围内,例如人员,你应该将这个方法添加到(服务器)域范围内:

    IQueryable<DailyScore> GetDailyScoresForPeriodForPersons(DateTime start, DateTime end, int firstPerson, int lastPerson) 
    { 
        return context 
         .DailyScores 
         .Where(s => s.Start > start && s.End < end) 
         .Where(s => s.Person.ID >= firstPerson && s.Person.ID < lastPerson) 
    } 
    
    在客户端

    然后,你会打电话它是这样的:

    var scoresQuery = context.GetDailyScoresForPeriodForPersons(start, end, 10, 20) 
    

一些资源:

+0

嗯,令人失望的是RIA服务不能像这样的演出,但我想我只需要在系统的限制范围内工作。非常感谢您的帮助。 – Shane