C# .Select在Microsoft.Azure.Documents.Linq中不受支持

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

各位程序员好

我有一个关于我正在为.NET Framework中的C#for RESTful/services/API开发的代码的技术问题。我试图基于返回布尔响应的谓词进行查询,我知道的方法之一是使用.Select或.Any。但是,这两种方法都不能很好地使用我的解决方案,因为我遇到一个错误,说“不支持方法'Select'。\r\nActivityId:…”或“不支持方法'Any'。\r\nActivityId:…”。下面是我在谓词上使用方法的代码块:

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中不受支持。无论如何,这不是我真正的工作,我只是想帮助一位同事,他说那行代码已经不用了。不过,谢谢你的好意。:)你好,乔纳斯