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

 三、拓展

简单版: 

复杂应用:重构 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/

 

posted @   hao_1234_1234  阅读(934)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示