C# .Select在Microsoft.Azure.Documents.Linq中不受支持
各位程序员好 我有一个关于我正在为.NET Framework中的C#for RESTful/services/API开发的代码的技术问题。我试图基于返回布尔响应的谓词进行查询,我知道的方法之一是使用.Select或.Any。但是,这两种方法都不能很好地使用我的解决方案,因为我遇到一个错误,说“不支持方法'Select'。\r\nActivityId:…”或“不支持方法'Any'。\r\nActivityId:…”。下面是我在谓词上使用方法的代码块:C# .Select在Microsoft.Azure.Documents.Linq中不受支持,c#,linq,azure,select,boolean,C#,Linq,Azure,Select,Boolean,各位程序员好 我有一个关于我正在为.NET Framework中的C#for RESTful/services/API开发的代码的技术问题。我试图基于返回布尔响应的谓词进行查询,我知道的方法之一是使用.Select或.Any。但是,这两种方法都不能很好地使用我的解决方案,因为我遇到一个错误,说“不支持方法'Select'。\r\nActivityId:…”或“不支持方法'Any'。\r\nActivityId:…”。下面是我在谓词上使用方法的代码块: var users = await this
var users = await this.GetEntitiesAsync(x =>
x.Type == typeof(models.User).FullName &&
x.TenantId == tenantId &&
x.Outlets.Select(y => y.Id.ToString()).Contains(storeId) &&
(x.UserName == userName && (x.Password == password || x.Pin == pin)));
下面是GetEntitiesAsync()函数的分解:
public virtual async Task<IEnumerable<TEntity>> GetEntitiesAsync(Expression<Func<TEntity, bool>> predicate)
{
if (!CollectionIdExists())
throw new ArgumentNullException(nameof(CollectionId));
using (var client = new DocumentClient(new Uri(EndPoint), AuthKey))
{
IDocumentQuery<TEntity> query = client.CreateDocumentQuery<TEntity>(
UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId))
.Where(predicate)
.AsDocumentQuery();
List<TEntity> results = new List<TEntity>();
while (query.HasMoreResults)
{
results.AddRange(await query.ExecuteNextAsync<TEntity>());
}
return results;
}
}
公共虚拟异步任务GetEntitiesAsync(表达式谓词)
{
如果(!CollectionIdExists())
抛出新ArgumentNullException(nameof(CollectionId));
使用(var client=newdocumentclient(新Uri(端点),AuthKey))
{
IDocumentQuery=client.CreateDocumentQuery(
CreateDocumentCollectionUri(数据库ID,CollectionId))
.Where(谓词)
.AsDocumentQuery();
列表结果=新列表();
while(query.HasMoreResults)
{
AddRange(wait query.ExecuteNextAsync());
}
返回结果;
}
}
此外,我更愿意修改谓词,因为该函数用于其他服务,如果我对该函数进行更改,可能会影响程序中的其他功能。不过,只要有相关的解决方案,我一定会尝试一下。此外,对于我目前正在从事的环境中的开发,我还是一个新手,因此,我为给您带来的麻烦向您道歉。我确实需要尽快解决这个问题,在我发布这个讨论时,我一直在为解决这个问题做深入的研究。提前感谢您的关心。祝你玩得开心!:) 谓词中的这一行
x.Outlets.Select(y => y.Id.ToString()).Contains(storeId)
这是无效的。不能在谓词中返回投影。相反,您应该将其更新为使用.Where()
,并特别查找Id与storeId匹配的门店
x.Outlets.Where(y => y.Id.ToString() == storeId)
嗨,戴夫,谢谢你的回复。我以前尝试过您建议的代码,但是GetEntitiesAsync()函数要求返回布尔值,所以如果我将其应用于谓词,它将无法工作,因为它将返回一个对象而不是布尔值。此外,我确实尝试了.ToBoolean(),但显然与.Select()相同,这在Azure Linq中不受支持。无论如何,这不是我真正的工作,我只是想帮助一位同事,他说那行代码已经不用了。不过,谢谢你的好意。:)你好,乔纳斯