我必须通过某些值搜索实体,空的我不必考虑它们,但其他我必须使用Linq to Entities的LIKE语句。
我想要获得的结果应该类似于这个SQL,
...
WHERE
(@taxid = '' OR m.taxid LIKE @taxid + '%') AND
(@personalid = '' OR m.personalid LIKE @personalid + '%') AND
(@certificate = '' OR m.certificate LIKE @certificate + '%')
我的Linq to Entities看起来像:
persons = context.Persons.Where(e => e.TaxId.Contains(taxId) && e.PersonalId.Contains(personalId) && e.Certificate.Contains(certificate)).ToList();
有任何线索吗?
答案 0 :(得分:0)
您可以在查询中包含参数检查
from p in context.Persons
where (taxId == "" || p.TaxId.StartsWith(taxId)) &&
(personalId == "" || p.PersonalId.StartsWith(personalId)) &&
(certificate == "" || p.Certificate.StartsWith(certificate))
select p
或动态构建查询
IQueryable<Person> query = context.Persons;
if (taxId != "")
query = query.Where(p => p.TaxId.StartsWith(taxId));
if (personalId != "")
query = query.Where(p => p.PersonalId.StartsWith(personalId));
if (certificate != "")
query = query.Where(p => p.Certificate.StartsWith(certificate));
// etc
var people = query.ToList();
还要考虑使用String.IsNullOrEmpty
来验证参数是否有值。
如果您需要生成LIKE '%' + @param + '%'
查询,请使用Contains
代替StartsWith
。