在天蓝色存储查询中使用 IN(或类似)条件
using IN(or similar) condition in an azure storage query
我有一个 Person 类型的对象,它只有两个属性:Name 和 Place.我有一个同名的 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.
我终于想通了。我使用 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();
希望对大家有所帮助!干杯!!
我有一个 Person 类型的对象,它只有两个属性:Name 和 Place.我有一个同名的 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.
我终于想通了。我使用 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();
希望对大家有所帮助!干杯!!