LinqPad的使用,LeftJoin遇到的问题, 连接数据库初始化问题

本文探讨了使用EF CodeFirst连接数据库的方法,重点在于如何在LinqPad中处理LeftJoin的问题。文章指出,初始化数据库连接时,设置Database.SetInitializer为null可以在WebMVC和WCF中读取数据。对于LeftJoin的转换,文章提供了一个从SQL到Linq的示例,并解释了LeftJoin与正常Join的区别,强调在新表后添加.DefaultIfEmpty()以处理空数据。此外,还提及了LinqPad在调试和理解Linq查询中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.EF CodeFirst  ,查询数据库。

写连接表的类,如果不想自己写,可以用实体数据模型edmx,添加表进去,自动生成数据类,再考到CodeFirst的工程。

类建好,连接数据库。

初始化的地方改成null,可以读取现有数据库数据

如果用DropCreateDatabaseIfModelChanges,在WebMVC中,可以读取数据,表不存在会自动创建新表。但是在WCF工程中,读取不到现有表数据,也不能创建新表。

public topviewxpDb():base("topviewxpConnection")
        {
            Database.SetInitializer<topviewxpDb>(null);
            //DropCreateDatabaseAlways   //数据模型发生变化是重新创建数据库
            //DropCreateDatabaseIfModelChanges

        }

2.LeftJoin问题:

    原有查询数据库SQL语句:

select t1.Items, t1.Class, t1.Name, isnull(t2.TypeCode,0) as nType from t_SetModel t1 left join t_Template_TypeProperty t2 on (t1.ID+'_前面板_0.png') = t2.FrontElevation where t1.Items <> '' and t1.Class <> '' order by t1.Items, t1.Class, nType

    改成Linq语句:

     List<t_SetModel> modelList = db.t_SetModels.ToList();

     List<t_Template_TypeProperty> typeList = db.t_TypeProperties.ToList();

     var list = from model in modelList
                           join type in typeList on (model.ID + "_前面板_0.png") equals type.FrontElevation into cls
                           from c in cls.DefaultIfEmpty()
                           where model.Items != "" && model.Class != ""
                           orderby model.Items, model.Class
                           select new
                           {
                               Item = model.Items,
                               Class = model.Class,
                               Name = model.Name,

                               nType = c == null ? 0 : c.TypeCode 

                                 //开始想着判断c.TypeCode,后面通过linqPad调试,发现leftjoin情况下,C就是空的。

                           };

    LeftJoin在某些情况下,会出现一些数据为空的情况。

    LeftJoin跟正常Join区别:Join之后加入一个临时表,在新表后加.DefaultIfEmpty()

    from x in XTable

    join y in YTable on x.x equale y.y into newTable

    from newValue in newTable.DefaultIfEmpty()

    select new

     {

            X1=x.x;

            Y1=newValue==null?"":newValue.y

      }

       //Todo:嵌套的LeftJon查询


3. LinqPad的使用

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值