孙吉宏 2019-08-23 11:01 采纳率: 0%
浏览 355

使用LINQ TO SQL 中的左外连接中DEFAULTIFEMPTY为什么赋不上默认值

进行SQL SERVER左外连接想用DEFAULTIFEMPTY()试着赋予默认值,结果赋不上是什么原因呢?

代码片段

控制台输出

            Location defaultLoc = new Location { Id = String.Empty, Name = "黑凤梨", Postcode = String.Empty };
            var re = from u in _context.UserMsg
                     join l in _context.Location
                     on u.LocationId equals l.Id
                     into LocGroup
                     from item in LocGroup.DefaultIfEmpty(defaultLoc)
                     where u.Status == "0"
                     select new
                     {
                         PerId = u.Id,
                         PerName = u.Name,
                         PerAge = u.Age,
                         PerLocation = item.Name
                     };
            var rre = from u in _context.UserMsg
                      join l in _context.Location
                      on u.LocationId equals l.Id
                      into LocGroup
                      select new { UserName = u.Name,Loc = LocGroup };
            List<Location> gg = new List<Location>();
            LogHelper.Logger.Info(JsonConvert.SerializeObject(gg));
            LogHelper.Logger.Info(JsonConvert.SerializeObject(gg.DefaultIfEmpty(defaultLoc)));
            LogHelper.Logger.Info(JsonConvert.SerializeObject(rre));
            LogHelper.Logger.Info(JsonConvert.SerializeObject(re));
  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 05:22
    关注

    在LINQ TO SQL中使用LEFT OUTER JOIN时,如果默认值在LEFT OUTER JOIN操作之前定义,那么可能无法正确地分配默认值。这是因为它需要将DEFAULTIFEMPTY函数绑定到正确的LEFT OUTER JOIN子句上。为了解决这个问题,你可以使用lambda表达式来定义默认值。请注意,lambda表达式应该在LEFT OUTER JOIN操作之前定义。以下是示例代码:

    Location defaultLoc = new Location { Id = String.Empty, Name = "黑凤梨", Postcode = String.Empty };
    var re = from u in _context.UserMsg
             join l in _context.Location
             on u.LocationId equals l.Id into LocGroup
             from item in LocGroup.DefaultIfEmpty()
                 .Select(l => new Location { Id = String.Empty, Name = "黑凤梨", Postcode = String.Empty })
             where u.Status == "0"
             select new
             {
                 PerId = u.Id,
                 PerName = u.Name,
                 PerAge = u.Age,
                 PerLocation = item.Name
             };
    

    在上面的代码中,我们使用了Select操作,使用lambda表达式来定义默认值。这将确保我们的LEFT OUTER JOIN中的DEFAULTIFEMPTY函数被正确绑定到LEFT OUTER JOIN子句上。

    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突