0

我有一个查询,我需要创建一个从远程存储在Windows Phone 8上的数据库中获取对象列表(让我们称之为Cats ) 。Microsoft Azure

为了获得这个对象列表(Cats),我必须遍历其他对象列表以提取外键,我们称之为CatHomes列表。但我也想要所有叫Bob的猫。

我知道如何让所有CatsBob

  private async void getCatsForCatHomesOrCalledBob(Collection<CatHome> homes)
  {
    // get a list of cats that have visited the cat homes in the collection
    IMobileServiceTableQuery<Cat> query = catTable
                                            .Where(cat => cat.Name == "Bob");

    Collection<Cat> items = null;
    // add the items to a list
    items = await query.ToCollectionAsync();
  }

但是我如何也遍历CollectionCatHome对象并将它们添加到查询中,以建立它

我知道我可以做类似的事情:

IMobileServiceTableQuery<Cat> query = 
   catTable.Where(cat => cat.Name == "Bob" || cat.HomeId == 1
                    || cat.HomeId == 2);

这不允许我遍历Collection,我想做的是:

IMobileServiceTableQuery<Cat> query = catTable.Where(cat => cat.Name == "Bob");
foreach(CatHome home in homes){
  query.AddOrStatement(cat.HomeId == home.Id);
}

但找不到办法做到这一点。

有替代方案吗?理想情况下,我希望能够将String变量传递给Where(),因此我可以将 SQL 语句构建为String,但也找不到这样做的方法。

AndroidiOS有类似的功能,您可以使用.Or()or方法构建表达式,这些方法在WP8.And()中不存在,以及类似的东西存在。IMobileServiceTableQuerySkip()

我知道我可以遍历CatHome对象列表并对每个对象进行查询,将结果添加到主列表中,但这似乎是对手机资源的不当使用。

任何帮助,将不胜感激。

4

2 回答 2

1

假设homesinforeach(CatHome home in homes){是一个列表,您可以这样做:

IMobileServiceTableQuery<Cat> query = catTable.Where(cat => cat.Name == "Bob" && homes.Contains(cat.HomeId));

不确定 IEnumerable.Contains 是否适用,但转换homes为 aList<CatHome>应该很容易。

于 2013-06-21T16:16:57.340 回答
0

这里已经在 where 子句中使用 Array 回答了 Linq 查询?. 先获取外键列表,然后在 contains where 子句中使用

于 2013-06-21T10:44:18.067 回答