EF 拉姆达 linq if else (整理)
首先想到:
var data0 = db.T_Plants2; //这里加.AsQueryable() if (locationType == 1) { .Where(d => d.NaturalEcosystem == true); } else { .Where(d => d.BuiltUpArea == true); } .Select(d => new { AnimalID = d.PlantID, Species = d.Species, }).ToList();
然而以上想法的结果是不正确的!
正确方式:
一、纳姆达方式
var data0 = db.T_Plants2.AsQueryable(); //这里加.AsQueryable() if (locationType == 1) { data0= data0.Where(d => d.NaturalEcosystem == true); } else { data0 = data0.Where(d => d.BuiltUpArea == true); } var data2= data0.Select(d => new { AnimalID = d.PlantID, Species = d.Species, }).ToList();// 这里Iqueryable 无法转化为list必须用新对象data2接收;
三元表达式:
//var data2 = db.T_Plants2
// .Where(d=> locationType == 1 ? d.NaturalEcosystem == true : d.BuiltUpArea == true)
// .Select(d => new //{ // AnimalID = d.PlantID, // Species = d.Species, // Genus = d.Genus, // Family = d.Family //}).ToList();
二、Linq方式
简单应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | static void Main( string [] args) { var Spottingname = "112" ; var plateno = "222" ; var processid = "c8b79051249940acbeca5dd951d2c168" ; DataBaseConnect(); List<PUNISH_ILLEGALVEHICLE_REALModel> pulist = new List<PUNISH_ILLEGALVEHICLE_REALModel>(); using (IRepository<PUNISH_ILLEGALVEHICLE_REALModel> repository = RepositoryManager.CreateRepository<PUNISH_ILLEGALVEHICLE_REALModel>()) { var list = repository.GetModels().ToList(); //DataTable dt = ListToDt<PUNISH_ILLEGALVEHICLE_REALModel>(list); var q = from u in list select u; if (! string .IsNullOrEmpty(Spottingname)) { q = q.Where(p => p.Spottingname == Spottingname); } if (! string .IsNullOrEmpty(plateno)) { q = q.Where(p => p.plateno == plateno); } if (! string .IsNullOrEmpty(processid)) { q = q.Where(p => p.processid == processid); } list = q.ToList(); //上边的所有if,只有到此处才会执行 } } |
复杂应用
//案例一
from p in db.products
select new
{
Owner = (p.price > 0 ?
from q in db.Users select q.Name :
from r in db.ExternalUsers select r.Name)
}
//案例二
from p in db.products
if p.price>0
select new
{
Owner=from q in db.Users
select q.Name
}
else
select new
{
Owner = from r in db.ExternalUsers
select r.Name
}
//案例三
private string getValue(float price)
{
if(price >0)
return "debit";
return "credit";
}
select new {p.PriceID, Type = getValue(p.Price)};
三、拓展
简单版:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | //对某一字段的查询,查询关键字是两个或两个以上的字符串,但查出来的相邻两个关键字的间距必须在20个字符以内 void Main() { var keys = new List< string >(); keys.Add( "女子" ); keys.Add( "须发" ); // keys.Add("如男子"); var filters = new List<System.Linq.Expressions.Expression<Func<LINQPad.User.CM_BookPageDetail, bool >>>(); foreach ( var key in keys) filters.Add(item=>item.Content.Contains(key)); for ( var i=0;i<keys.Count ;i++) { if (i>0) { var lastKey = keys[i-1]; var currentKey = keys[i]; filters.Add(item=> item.Content.IndexOf(currentKey) - item.Content.IndexOf(lastKey) < 20); } } var query = from item in CM_BookPageDetails select item; foreach ( var filter in filters) query = query.Where(filter); query.Take(10).Dump(); } |
复杂应用:重构 where、orderby 方法、建立filter模型
https://www.cnblogs.com/hao-1234-1234/p/9647322.html#4225885
参考文章
http://www.it1352.com/401595.html
https://www.cnblogs.com/macT/p/11641522.html
https://stackoverflow.com/questions/443044/if-else-in-linq
https://q.cnblogs.com/q/73479/
树立目标,保持活力,gogogo!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具