Csharp/C#教程:Linq to SQL多条件where子句分享


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; } 

www.ctvol.com true Article Csharp/C#教程:Linq to SQL多条件where子句分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/987935.html

(0)
上一篇 2021年12月23日 上午9:36
下一篇 2021年12月23日 上午9:36

精彩推荐