2011-03-04 25 views
0

我有一個IQueryable我從包含名爲「NewValue」字段的數據庫中選擇。該字段將包含0,1或2.我想用基於它的數字的字符串替換值。
即0 =「有效」。我知道IQueryables不是用來改變值大多隻是用於查詢,但我需要使用它在下一行添加到視圖模型基於結果使用LINQ替換IQueryable中的所有值使用LINQ

var AssessmentList = assessment      
.Select(p => new LogManagementViewModel 
{ 
    newValue = p.NewValue, 
}); 

我如何更改assement.NewValue所有值的字符串?

回答

1
var values = new [] {"StrValue1", "StrValue2", "StrValue"}; 

var AssessmentList = assessment      
    .AsEnumerable() 
    .Select(p => new LogManagementViewModel 
     { 
      newValue = values[p.NewValue], 
     }); 
+0

我以前嘗試這樣做,它給了我一個錯誤消息說,一個LINQ的IQueryable不能包含數組索引。我是釋義我忘了實際的錯誤代碼 – Loogawa 2011-03-04 20:53:43

+0

@Loogawa - 這就是你應該從什麼開始。在這種情況下,添加'AsEnumerable()'調用:var AssessmentList = assessment.AsEnumerable()。選擇(...);'或者使用其他方法使它與SQL一起工作 – Snowbear 2011-03-04 20:55:39

+0

這很好。雖然在這裏有很多很好的答案,但我也可以做到。我第一次嘗試這樣做的唯一缺點是.AsEnumerable()。我仍然不明白這是如何工作的。 – Loogawa 2011-03-04 21:03:03

0

方式一:

添加一個新的計算性能到您的類(假設你有任何生成的代碼之外的部分類)。然後,那個計算出的類可以做翻譯,但它需要。您的視圖模型可以引用此計算值。

0

我會讓你LogManagementViewModel一個構造函數重載,做這項工作對你來說,是這樣的:

public LogManagementViewModel(int NewValue) 
{ 
    switch(NewValue) 
    { 
     case 0: 
     this.NewValue = "Active"; 
     break; 
     // etc... 
    } 
} 

IMO,這個地方在它的適當位置的邏輯,讓您的視圖模型翻譯它應該是,它不是你的LINQ /數據庫查詢的責任。

+0

問題是我有其他的事情,使用viewModel它不會是一個數字,但我想我可以測試這與額外的邏輯。不過這是個好主意。謝謝 – Loogawa 2011-03-04 20:55:01

+0

你總是可以有多個構造函數,構造一個適合你的需求的構造函數。 – CodingGorilla 2011-03-04 20:57:34

+0

我真的很喜歡這個答案,但@snowbear非常接近我已經完成的工作。只需要添加.AsEnumerable(),所以我會給他。但我喜歡這個答案 – Loogawa 2011-03-04 21:01:58

2
var dictionary = new Dictionary<int, string> 
{ 
    { 0, "Active" }, 
    { 1, "Inactive" }, 
    // etc 
}; 

var AssessmentList = assessment      
.Select(p => new LogManagementViewModel 
{ 
    newValue = dictionary[p.NewValue], 
}); 

這也適用於其他類型之間的映射。

1

最簡單,最乾淨的將是一個映射方法:

string MapToString(int value) 
{ 
    //.. 
} 

var AssessmentList = assessment      
.Select(p => new LogManagementViewModel 
{ 
    NewValue = MapToString(p.NewValue), 
});