C# 使用表达式将查询提取到Azure表存储
我正在创建一个类来使用Azure表存储执行CRUD功能 我在这里使用泛型类型 我有下面的方法,我正试图传入一个表达式,以便在C# 使用表达式将查询提取到Azure表存储,c#,azure,C#,Azure,我正在创建一个类来使用Azure表存储执行CRUD功能 我在这里使用泛型类型 我有下面的方法,我正试图传入一个表达式,以便在TableQuery中使用,但我遇到了一些问题 行TableQuery query=new TableQuery()。其中(条件)无法编译,并给我消息 Cannot implicitly convert type 'System.Linq.IQueryable<T>' to 'Microsoft.WindowsAzure.Storage.Table.TableQ
TableQuery
中使用,但我遇到了一些问题
行TableQuery query=new TableQuery()。其中(条件)代码>无法编译,并给我消息
Cannot implicitly convert type 'System.Linq.IQueryable<T>'
to 'Microsoft.WindowsAzure.Storage.Table.TableQuery<T>'.
An explicit conversion exists (are you missing a cast?)
无法隐式转换类型'System.Linq.IQueryable'
转到“Microsoft.WindowsAzure.Storage.Table.TableQuery”。
存在显式转换(是否缺少强制转换?)
我理解这条信息,知道它告诉我我错过了一个演员阵容,尽管我不确定如何正确地编码
我的全部方法是:
public List<T> GetSome<T>(Expression<Func<T, bool>> criteria) where T : ITableEntity, new()
{
TableQuery<T> query = new TableQuery<T>().Where<T>(criteria); // <---- This line isn't working
List<T> results = table.ExecuteQuery<T>(query).ToList<T>();
return results;
}
public List GetSome(表达式条件),其中T:ITableEntity,new()
{
TableQuery=新建TableQuery()。其中(条件);//错误是因为扩展方法返回的值是类型,但您正在分配给类型为TableQuery
的变量,并且这些类型之间没有隐式有效的类型转换。好的,所以我找到了它-如何为Azure表存储传递lambda表达式以供使用
我将我的方法更改为:
public List<T> GetSome<T>(Expression<Func<T, bool>> criteria) where T : ITableEntity, new()
{
// table, in this case, is my `CloudTable` instance
List<T> results = table.CreateQuery<T>().Where(criteria).ToList();
return results;
}
如果这是针对Azure Table Store您不会/不应该做的事情,请务必让我知道
同时,这也是我满足要求的方式。我理解这一点。我所挣扎的是如何让它工作。我认为我使用了错误的方法,但不确定我应该使用哪些方法来传递lambda。这也正是我所寻找的。我也很难编写代码来翻译表达式到表存储查询
// my table storage class
TableStorage ts = new TableStorage("ContactData");
// search with expression
List<DynamicTableEntity> results = ts.GetSome<DynamicTableEntity>(t => t.Properties["FirstName"].StringValue == "Darren");