在天蓝色存储查询中使用 IN(或类似)条件

using IN(or similar) condition in an azure storage query

我有一个 Person 类型的对象,它只有两个属性:NamePlace.我有一个同名的 azure table,具有相同的两列和一个名为 Date 的附加列。我必须根据 地点存在于 table.I 的条件来获取 日期 ,其中有单独的名称和地点列表它应该匹配值。例如:

//some data into these lists
    List<string> nameList = new List<string>(); 
    List<string> placeList = new List<string>();

经过一些研究,我试过这样的方法:

IEnumerable<Person> query = (from p in table.CreateQuery<Person>() where nameList .Contains(p.Name)|| placeList .Contains(p.Place)  select p);

但这给出了一个错误,说不支持。实现这一目标的最佳方法是什么?请注意名称和地点列表可以包含 1000 多个条目。

更新

这是错误消息:

The expression (value(System.Collections.Generic.List`1[System.String]).Contains([10007].Name) Or
value(System.Collections.Generic.List`1[System.String]).Contains([10007].Place)) is not supported.

我终于想通了。我使用 GenerateFilterConditionCombineFilters 来实现它。

代码:

    string queryString = String.Empty;
    string query1 = null;
    for(int i=0;i<nameList.Count;i++)
     {
      queryString  = TableQuery.GenerateFilterCondition("Name",QueryComparisons.Equal,nameList[i].ToString());
     if (i == 0)
      query1 = queryString;
      else
      query1 = TableQuery.CombineFilters(query1, TableOperators.Or, queryString);
      }
   queryString = string.Empty;
   for (int j = 0; j < placeList.Count;j++ )
     {
      queryString = TableQuery.GenerateFilterCondition("Place", QueryComparisons.Equal, placeList[j].ToString());
    query1 = TableQuery.CombineFilters(query1, TableOperators.Or, queryString);
    }
    TableQuery<Person> tblQuery = new TableQuery<Person>().Where(query1);
    List<Person> evntHst = table.ExecuteQuery(tblQuery).OrderByDescending(t => t.Timestamp).ToList();

希望对大家有所帮助!干杯!!