zoukankan      html  css  js  c++  java
  • 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方式

    //案例一

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

     三、拓展

    简单版: 

    //对某一字段的查询,查询关键字是两个或两个以上的字符串,但查出来的相邻两个关键字的间距必须在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://stackoverflow.com/questions/443044/if-else-in-linq

    https://q.cnblogs.com/q/73479/

  • 相关阅读:
    ios开源项目2
    Cocoa 框架 For iOS(一) 框架的介绍
    iPhone开源项目大全
    8款iOS的日历开源代码
    二维码扫描工具和开发包 ZBar
    图文解释XCode常用快捷键的使用
    常用的iOS高效开源类库
    static_cast
    [转]SecureCRT rz 上传文件失败问题
    Linux中的EAGAIN含义
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/11271672.html
Copyright © 2011-2022 走看看