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

时间:2015-06-15 15:56:10

标签: azure azure-storage azure-table-storage

我有一个类型的对象,它只有两个属性:名称放置。我有一个同名的天蓝色表,有两个相同的列和一个名为日期的附加列。我必须根据表格中存在名称的条件来获取日期。我有名称和地点的单独列表,其中应该与值匹配。例如:

//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.

1 个答案:

答案 0 :(得分:0)

我终于明白了。我使用 GenerateFilterCondition CombineFilters 来实现它。

代码:

    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();

希望它能帮到别人!干杯!!