我有一个POCO
看起来像的实体
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 时,查询失败并且不检查ClassTwo
. 我不确定如何在不单独运行查询并合并结果的情况下解决此问题。
有人有更好的计划吗?