2012-08-14 111 views
3

我有一個類似的對象列表。這個列表中的對象都有一個名爲Name的屬性和一個名爲Mk2Result但枚舉類型爲Mk2TestResult的枚舉類型。鑄造linq查詢結果枚舉

現在裏面一個for循環餘風,看看當前itterator整數列表中的存在作爲一個對象的名稱:

for(...... 
{ 
//  
    var query = 
     from pin in _pins 
     where pin.Name == i.ToString() 
     select pin.Mk2Result; 

    Mk2TestResult result = (Mk2TestResult)query; 

    //Do some more stuff 
} 

但是,編譯以下消息抱怨:

Cannot convert type 'System.Collections.Generic.IEnumerable<DataModels.Mk2TestResult>' to 'DataModels.Mk2TestResult' 

如何正確返回查詢結果作爲枚舉類型?

回答

1

您的查詢實際返回的Enum類型的集合。如果您只需要一個結果,則必須使用Single,SingleOrDefault,FirstFirstOrDefault擴展方法。

注:使用名爲OrDefault,當你認爲它可能查詢返回任何結果的方法。調用SingleFirst時,空的結果集會導致異常。

var query = 
    from pin in _pins 
    where pin.Name == i.ToString() 
    select pin.Mk2Result; 

// If pin.Mk2Result is strongly typed, the cast is not necessary 
Mk2TestResult result = query.FirstOrDefault(); 
2

嘗試

Mk2TestResult result = (Mk2TestResult)query.FirstOrDefault(); 

因爲你想投列表一個對象。 但你只會得到第一個對象。您可以使用FirstOrDefault函數參數中的函數來獲取所需的對象。

1

查詢的結果是元素的集合,而不是單個元素的集合。這正是編譯器試圖說的。如果你想從這個集合中獲得第一個值,你應該使用Enumerable.First Method。如果你想要疊加Mk2TestResult,你可以使用Enumerable.Aggregate Method。或者,您可以簡單地遍歷集合並根據具體的值執行一些操作。

0

LINQ的返回IEnumerable的,所以你必須遍歷throught它:

var query = 
    (from pin in _pins 
    where pin.Name == i.ToString() 
    select pin.Mk2Result).ToList(); 

foreach(var result in query) 
    ... 
0

你是返回類型是Mk2TestResul的集合,所以你需要將其存儲在實現IEnumerable列表或數組或任何東西。

例子:

List<Mk2TestResult> result = query.ToList(); 
1

你想投Mk2TestResult對象的集合,只是一個這樣無論是獲得FirstOrDefault或轉換爲一個IEnumerable

-1

要添加新的枚舉類型來動態LINQ,你必須添加以下代碼:

typeof(Enum), 
typeof(T) 

T : Enum Type. 

到動態的predefinedTypes財產。

對我而言這是工作