【问题标题】:Joining table does not accept null values. mvc5 c#联接表不接受空值。 mvc5 c#
【发布时间】:2020-03-13 01:50:46
【问题描述】:

我在连接表时遇到问题,我的 2 表为空 '_departureItemsTableService' 和 '_departureTableService',如果 2 表为空,则出现错误。我的代码有什么问题。谢谢

var list = (from t in tracking
                    join d in _departureItemsTableService.GetAll() on t.box_id.Trim() equals d.BoxNo.Trim() into mar from submark in mar.DefaultIfEmpty()
                    join dt in _departureTableService.GetAll() on submark.DepartureId equals dt.DepartureId into dep from depart in dep.DefaultIfEmpty()

                    select new TrackingListModel
                    { 
                        Id = t.Id,
                        Name = t.firstname_s + " " + t.lastname_s,
                        Departure = depart?.DepartureDate ?? String.Empty,
                    });

【问题讨论】:

  • 你找到问题了吗?

标签: c# sql asp.net-mvc


【解决方案1】:

你能说明 .GetAll() 是如何实现的吗?如果 .GetAll() 服务返回一个空列表而不是 null,这将正常工作。

另一种可能的解决方法是将输出分配到 linq 之外的变量中,并使用如下所示的空列表进行初始化 -

var dItemTable =  _departureItemsTableService.GetAll();
if (dItemTable == null)
    dItemTable = new List<DepartureItems>();

然后在linq中使用dItemTable

【讨论】:

  • 在 submark 上的 _departureTableService.GetAll() 中加入 dt?.DepartureId 等于 dt.DepartureId 从 dep.DefaultIfEmpty() 中的 dep 进入 dep
  • 通过添加 ?在 submark 中它有效。因为我的专栏可以为空
  • 我以前对 linq 有过不好的体验。最好不要依赖 linq 来处理可为空的
猜你喜欢
  • 1970-01-01
  • 2019-10-07
  • 2019-01-29
  • 2016-03-10
  • 2012-02-28
  • 2019-11-13
  • 1970-01-01
  • 2021-09-03
  • 2018-12-20
相关资源
最近更新 更多