Linq to SQL多条件where子句
目前我正在检索我的结果如下:
public List GetClaims() { return _db.claims.OrderBy(cl => cl.claimId).ToList(); }
但是现在我想在listview上面添加基于filter的8个条件where子句。
所以我变成了:
public List GetFilteredClaims(string submissionId, string claimId, string organization, string status, string filterFromDate, string filterToDate, string region, string approver) { return _db.claims.Where(cl => cl.submissionId == 5).ToList(); }
如何检查每个filter以仅在包含值时添加where子句?
你没有理由不能通过多次调用来过滤结果。 由于LINQ to SQL的延迟执行,它将全部在一个SQL语句中执行:
public List GetFilteredClaims(string submissionId, string claimId, string organization, string status, string filterFromDate, string filterToDate, string region, string approver) { IQueryable filteredClaims = _db.claims; if (!string.IsNullOrWhiteSpace(submissionId)) { filteredClaims = filteredClaims.Where(claim => claim.submissionId == submissionId); } if (!string.IsNullOrWhiteSpace(claimId)) { filteredClaims = filteredClaims.Where(claim => claim.claimId == claimId); } ... return filteredClaims.ToList(); }
如果您需要添加OR条件,可以查看PredicateBuilder 。
您可以将每个filter选项分组为OR null条件,并将它们与AND一起链接,如下所示:
public List GetFilteredClaims(string submissionId, string claimId, string organization, string status, string filterFromDate, string filterToDate, string region, string approver) { return _db.claims .Where(cl => (cl.submissionId == submissionId || submissionId == null) && (cl.claimId == claimId || claimId == null) && so on and so on... ).ToList(); }
因此,如果submissionId == null和claimId ==“123”,它只会过滤claimId上的结果。 您可以使用空字符串或任何“无值”条件替换每个null
值。
看看LINQKIT https://www.albahari.com/nutshell/linqkit.aspx它将允许你构建谓词
这是我使用的代码,但请阅读上面的文档。 谓词将允许您链接一堆OR或AND或它的组合。
上述就是C#学习教程:Linq to SQL多条件where子句分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
private static IEnumerable filterData(string firstName, string lastName, List results) { var predicate = PredicateBuilder.True (); IEnumerable a; if (excludeBadData) if (firstName != string.Empty) { predicate = predicate.And(p => p.User.FirstName.ToLower().Contains(firstName.ToLower())); } if (lastName != string.Empty) { predicate = predicate.And(p => p.User.LastName.ToLower().Contains(lastName.ToLower())); } a = from r in results.AsQueryable().Where(predicate) select r; return a; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/987935.html