2014-03-25 98 views
0

我有以下LINQ查詢接收指標:獲取行索引使用LINQ查詢自定義對象

fieldIndexes = this.record.Fields.Where(a => !a.IsCodeField) 
           .OrderBy(a => a.DatabaseIndex) 
           .Select(a => a.DatabaseIndex - 1) 
           .ToArray(); 

但我想搜索的實際指數更換a.DatabaseIndex。我知道.Select((a, index) => new (index, a))...的語法,但我不確定如何在此處投射a以使其屬於我的類型,在本例中爲Field。我曾嘗試:

fieldIndexes = this.record.Fields.Select((a, index) => new {index, a}) 
           .Where(a => !a.IsCodeField) // <- Invalid Cast. 
           .OrderBy(a => a.DatabaseIndex) 
           .Select(a => a.DatabaseIndex - 1) 
           .ToArray(); 

我怎樣才能在LINQ語句中投a到我喜歡的類型?

謝謝你的時間。

回答

5

Where條款你的工作與新創建的匿名對象具有屬性aindex,您可以使用:

.Where(a => !a.a.IsCodeField) 

當然,這可以在更易讀FASION來完成:

fieldIndexes = this.record.Fields.Select((a, index) => new {Index = index, Field = a}) 
           .Where(a => !a.Field.IsCodeField) 
           ... 
3

您正在將序列項投影到具有屬性indexa的匿名對象。原始項目將可通過屬性訪問:

fieldIndexes = this.record.Fields.Select((a, index) => new {index, a}) 
           .Where(x => !x.a.IsCodeField)