У меня есть POCO
сущность, которая выглядит какNull проверка, где положение в EF
public class Rebate : IEntity
{
[Key]
public int Id { get; set; }
[ForeignKey("ClassOneId")]
public virtual ClassOne ClassOne { get; set; }
public int ClassOneId { get; set; }
[ForeignKey("ClassTwoCode")]
public virtual ClassTwo ClassTwo { get; set; }
public string ClassTwoCode { get; set; }
public double Rebate { get; set; }
}
Если ClassOne
имеет значение ClassTwo
будет нулевым, и наоборот, теперь, когда я хочу, чтобы выполнить запрос проверки свойство имени каждого класса с использованием linqkit
:
var predicate = PredicateBuilder.True<Rebate>();
if (!string.IsNullOrEmpty(term))
predicate = predicate.And(x => (x.ClassOne != null ?
x.ClassOne.Name.Contains(term) : x.ClassTwo.Name.Contains(term)));
ИЛИ
var predicate = PredicateBuilder.False<Rebate>();
if (!string.IsNullOrEmpty(term))
predicate = predicate.Or(x => x.ClassOne.Name.Contains(term)).
Or(x.ClassTwo.Name.Contains(term)));
В обоих случаях я получаю результаты, когда ClassOne
соответствует названию, но не имеет результатов, где ClassTwo
совпадений.
Мое понимание того, что происходит, заключается в том, что когда ClassOne
имеет значение null, запрос не работает и не проверяет свойство name ClassTwo
. Я не уверен в том, как обойти это без выполнения запросов отдельно и слияния результатов.
У кого-нибудь есть лучший план?