我内心联接的问题

时间:2011-02-07 09:36:41

标签: c# .net linq list

我有以下LINQ查询。 FactColumnsFactColumn个对象的列表,SelectedColumns是一个字符串列表。我想在FactColumn上使用内部联接获取SelectedColumns个对象的列表。但是,对于以下查询,我收到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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我认为问题在于您的加入。由于您似乎没有使用任何信息,我会将其更改为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
      };