使用lambda表达式和一个参数为空的查询

时间:2018-11-12 09:15:51

标签: c# lambda azure-cosmosdb

我想用lambda表达式进行查询。 我的数据库是Cosmos DB。 我想过滤两个参数,两个参数之一可以为null。

例如,我要搜索名称和姓氏,并且两者之一为空。

这是我正在尝试的

var result = this._client.CreateDocumentQuery<Person>(
                    UriFactory.CreateDocumentCollectionUri(_idDatabase, _idCollection), queryOptions)
                    .Where((f) => f.Name == Name && f.LastName == lastName )
                    .AsEnumerable()
                    .ToList();

3 个答案:

答案 0 :(得分:0)

所以呢?

var result = this._client.CreateDocumentQuery<Person>(
    UriFactory.CreateDocumentCollectionUri(_idDatabase, _idCollection), queryOptions)
    .Where((f) => (f.Name == Name || (f.Name == null && f.LastName != null)) && (f.LastName == lastName || (f.LastName == null && f.Name != null))
    .AsEnumerable()
    .ToList();

答案 1 :(得分:-1)

也许您可以使用IQueryable:

IQueryable<Person> iPerson = this._client.CreateDocumentQuery<Person>(
                    UriFactory.CreateDocumentCollectionUri(_idDatabase, _idCollection), queryOptions);

if(Name != null) iPerson = iPerson.Where(f => f.Name == Name);
if(lastName != null) iPerson = iPerson.Where(f => f.LastName == lastName)
return iPerson.AsEnumerable().ToList();

答案 2 :(得分:-1)

尝试这样的事情:

var result = this._client.CreateDocumentQuery<Person>(
                    UriFactory.CreateDocumentCollectionUri(_idDatabase, _idCollection), queryOptions)
                    .Where(f => f.Name == $"{Name ?? f.Name}") &&
                                f.LastName == $"{lastName ?? f.LastName}")  )
                    .AsEnumerable()
                    .ToList();