programing

Mongo C# 드라이버 - 중첩을 사용하여 동적으로 필터 구축

iphone6s 2023. 5. 12. 21:41
반응형

Mongo C# 드라이버 - 중첩을 사용하여 동적으로 필터 구축

내포된 식을 가정합니다.

여기서 a = 1 AND (b = 4 OR b = 5 )

여러 Builder 개체를 사용하고 이러한 식을 사용하여 전체 필터를 작성하는 방법은 무엇입니까?

Builders정말 유연한 클래스이며, "& = AND" 및 "| = OR" 연산자를 재정의하기도 합니다.

당신의 예는 다음과 같습니다.

var filter = Builders<User>.Filter.Eq(x => x.A, "1");
filter &= (Builders<User>.Filter.Eq(x => x.B, "4") | Builders<User>.Filter.Eq(x => x.B, "5"));

조건부로 필터를 추가하려면 다음 방법을 사용합니다.

var builder = Builders<Student>.Filter;
var filter = builder.Empty;

if (!string.IsNullOrWhiteSpace(firstName))
{
   var firstNameFilter = builder.Eq(x => x.FirstName, firstName);
   filter &= firstNameFilter;
}

if (!string.IsNullOrWhiteSpace(lastName))
{
   var lastNameFilter = builder.Eq(x => x.LastName, lastName);
   filter &= lastNameFilter;
}

if (minAge != null && maxAge != null)
{
   var ageFilter = builder.And(builder.Gt(x => x.Age, minAge),
      builder.Lt(x => x.Age, maxAge));
   filter &= ageFilter;
}

var result = await _plpResultCollection.Find(filter).ToListAsync();

이렇게 아주 간단하게 사용할 수 있습니다...

var filter = Builders<Rental>.Filter.Where(s => s._id== id && s.Price==1500);

언급URL : https://stackoverflow.com/questions/32227284/mongo-c-sharp-driver-building-filter-dynamically-with-nesting

반응형