我有一个人类型的对象,它只有两个属性:名称和放置。我有一个同名的天蓝色表,有两个相同的列和一个名为日期的附加列。我必须根据表格中存在名称或的条件来获取日期。我有名称和地点的单独列表,其中应该与值匹配。例如:
//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.
答案 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();
希望它能帮到别人!干杯!!