2011-02-07 43 views
3

我有下面的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

+0

數據集是否重新加載?請記住,即使兩行來自同一個源(數據庫)幷包含相同的數據(如果它們被重載),.NET將創建一個新的引用,除非類具有相等運算符。 – mmix 2011-02-07 09:44:20

回答

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) 
+0

以上是我的要求的正確答案!!!!! – Omkar 2011-02-26 10:09:48

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 
     };