【问题标题】:Problem with my inner join我的内部连接有问题
【发布时间】:2011-02-07 09:36:40
【问题描述】:

我有以下 LINQ 查询。 FactColumnsFactColumn 对象列表,SelectedColumns 是字符串列表。我想使用SelectedColumns 上的内部连接来获取FactColumn 对象的列表。但是,对于以下查询,我收到了 null

var lst = from fc in this.DataSetFact.FactColumns
          join column in m_TableDataDict[tableGuid].SelectedColumns
              on fc.Name equals column
          select new
          {
              fc.ColumnType,
              fc.DataType,
              fc.FriendlyName,
              fc.Name,
              fc.ParentFactName,
              fc.Size,
              fc.State
          };

为什么我收到null

【问题讨论】:

  • 数据集是否重新加载?请记住,即使两行来自同一个源(数据库)并且如果重新加载它们包含相同的数据,.NET 将创建一个新引用,除非类具有相等运算符 .NET 按引用进行比较返回 false。

标签: c# .net linq list


【解决方案1】:

我可以看到上面的代码运行良好。检查数据是否正确加载。

样本

    List<FactColumn> FactColumns = new List<FactColumn>();
    List<string> SelectedColumns = new List<string>();
    private void Form2_Load(object sender, EventArgs e)
    {
        FactColumns.Add(new FactColumn() { DataType = "int", Name = "int" });
        FactColumns.Add(new FactColumn() { DataType = "string", Name = "string" });
        SelectedColumns.Add("string");
        var lst = from fc in this.FactColumns join column in SelectedColumns on fc.Name equals column select new { fc.DataType,  fc.Name};
        foreach (var column in lst)
        {
            MessageBox.Show(column.Name);
        }
    }

    public class FactColumn
    {
        public string DataType { get; set; }
        public string Name { get; set; }
    }

如何使用 lambda:

var lst = this.DataSetFact.FactColumns.Where(hm=>hm_TableDataDict[tableGuid].SelectedColumns.Contains(hm.Name)

【讨论】:

    【解决方案2】:

    我认为问题在于您的加入。由于您似乎没有使用其中的任何信息,因此我将其更改为 where 语句。试试这个:

    var lst = from fc in this.DataSetFact.FactColumns
          where m_TableDataDict[tableGuid].SelectedColumns.Contains(fc.Name)
          select new
          {
              fc.ColumnType,
              fc.DataType,
              fc.FriendlyName,
              fc.Name,
              fc.ParentFactName,
              fc.Size,
              fc.State
          };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      相关资源
      最近更新 更多