【问题标题】:Can LINQ To SQL detect where a table association breaks?LINQ To SQL 可以检测表关联中断的位置吗?
【发布时间】:2010-07-28 20:24:13
【问题描述】:

我有两个表格用于填充网格视图。这些表有一个名为 RangeActivityID 的公共字段。我的问题是数据库非常旧,并且一些较旧的条目与表之间的 ID 不匹配,因此我无法在数据库中添加它们之间的关联。

不关心不匹配的旧数据,所以在我的 .dbml 文件中,我手动创建了一个关联,以便从两个表中选择好的数据。这是我的 LINQ 查询:

var collective = from p in rangeConnection.RangeActivities
                            orderby p.RangeActivityID
                            select new
                            {
                                TestName = p.TestName,
                                DateTime = p.ActivityDateTime,
                                Notes = p.Notes,
                                //RoundSerialNumber = p.RoundFire.RoundSerialNumber,
                                //RoundType = p.RoundFire.RoundType,
                                //LotStockNumber = p.RoundFire.LotNumber
                            };

我可以将我的网格数据源设置为“集体”并且一切正常,但是如果我取消注释三个注释行,则查询不会返回任何结果,因为表中的数据不符合关联条件。有没有办法让 LINQ 查询忽略不匹配的结果?

提前致谢!

【问题讨论】:

    标签: c# asp.net sql-server linq-to-sql


    【解决方案1】:

    尝试添加where p.RoundFire != null 条件。

    【讨论】:

      【解决方案2】:

      建议改为join,并模拟 SQL LEFT JOIN

       var q = from p in rangeConnection.RangeActivities
                  join r in rangeConnection.RoundFires
                     on p.RangeActivityID equals r.RangeActivityID into sr
                  from x in sr.DefaultIfEmpty()
                   select new
                              {
                                  TestName = p.TestName,
                                  DateTime = p.ActivityDateTime,
                                  Notes = p.Notes,
                                  RoundSerialNumber = x.RoundSerialNumber,
                                  RoundType = x.RoundType,
                                  LotStockNumber = x.LotNumber
                                  //consider checking for string.IsNullOrEmpty() 
                                  //for the RoundFires properties
                              };
      

      您的实体的语法可能不准确,但如果它有助于您找到解决方案,请编辑我的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        相关资源
        最近更新 更多