我正在创建一个类来使用 Azure 表存储执行 CRUD 功能。
我在这使用泛型类型。
我有以下方法,我试图传入一个表达式以在 中使用TableQuery,但遇到了一些问题。
该行TableQuery<T> query = new TableQuery<T>().Where<T>(criteria);不会编译,并给我消息
Cannot implicitly convert type 'System.Linq.IQueryable<T>'
to 'Microsoft.WindowsAzure.Storage.Table.TableQuery<T>'.
An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)
我理解这条消息并知道它告诉我我缺少演员表,但我不确定如何正确编码。
我的完整方法是:
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;
}
Run Code Online (Sandbox Code Playgroud)
好的,所以我想通了 - 我如何传递 lambda 表达式以供 Azure 表存储使用。
我将我的方法更改为以下内容:
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;
}
Run Code Online (Sandbox Code Playgroud)
我现在可以传入一个表达式。例如,要搜索DynamicTableEntity我可以使用:
// my table storage class
TableStorage ts = new TableStorage("ContactData");
// search with expression
List<DynamicTableEntity> results = ts.GetSome<DynamicTableEntity>(t => t.Properties["FirstName"].StringValue == "Darren");
Run Code Online (Sandbox Code Playgroud)
如果这是您不会/不应该对 Azure 表格存储执行的操作,请告诉我。
同时,这就是我满足要求的方式。
| 归档时间: |
|
| 查看次数: |
1670 次 |
| 最近记录: |