使用LINQ基于结果将IQueryable中的所有值替换为字符串

时间:2011-03-04 20:42:50

标签: c# linq

我从一个包含名为“NewValue”的字段的数据库中选择了IQueryable。该字段将包含0,1或2.我想用一个基于其编号的字符串替换该值 即0 =“有效”。我知道IQueryables不是用来改变值,主要是为了查询,但我需要在下一行使用它来添加到ViewModel

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

如何将assement.NewValue中的所有值更改为字符串?

5 个答案:

答案 0 :(得分:2)

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

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

这也适用于其他类型之间的映射。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

最简单,最干净的是映射方法:

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

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

答案 3 :(得分:0)

一种方式:

在您的类中添加一个新的计算属性(假设您在任何生成的代码之外都有一个部分类)。然后,该计算类可以进行翻译,但需要。您的视图模型可以引用此计算值。

答案 4 :(得分:0)

我会在你的LogManagementViewModel中做一个构造函数重载,它可以为你工作,如下所示:

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

IMO,这将逻辑置于适当的位置,让您的视图模型按原样进行翻译,这不是您的LINQ /数据库查询的责任。