如何将枚举赋值给viewmodel属性
本文关键字:viewmodel 属性 赋值 枚举 | 更新日期: 2023-09-27 18:12:32
主要分类:
public enum FooType
{
Red,
Green,
Blue
}
public class Foo
{
public int Id { get; set; }
public FooType Type { get; set; }
public string FooName { get; set; }
}
视图模型:
public class FooVM
{
public FooType Type { get; set; }
public string FooName { get; set; }
}
现在,我想用Linq
选择我想要的那个_fooService.All().Select(x => new FooVM
{
FooName = x.FooName,
Type = x.Type, // I'm having trouble with this guy. Says I cannot implicitly convert it.
}
);
得到的错误是:
不能隐式转换类型"命名空间"。输入'到'Namespace.ViewModel.Type'。存在显式转换(您是否缺少强制类型转换?)
我有转换它的问题。但我不知道该怎么做。我错过了什么?任何帮助都将非常感激。由于
错误提示您在两个独立的命名空间中有一个名为Type
的enum,即使您具有相同的值,仍然不同。
namespace Namespace.Type
{
public enum FooType
{
Red,
Green,
Blue
}
}
namespace Namespace.ViewModel.Type
{
public enum FooType
{
Red,
Green,
Blue
}
}
如果基础整数值相同,或者每个枚举中的值顺序相同,则可以将一个枚举显式强制转换为int
,而让另一个枚举从int
值隐式强制转换:
_fooService.All()
.Select(x => new FooVM
{
FooName = x.FooName,
Type = (int)x.Type,
});
您的错误消息提示您在Namespace
和Namespace.ViewModels
中都定义了enum FooType
,因此它们之间不能进行隐式转换。我建议你从Namespace.ViewModels
中删除定义,只在Namespace.ViewModels
中包含对Namespace
的引用(使用语句),或者按照Trevor
你的查询没有问题。我只是测试了一下。我检查一下你们服务返回的实体。你可以在LinqPad中运行。
void Main()
{
//create test list
var fooService = new List<Foo>();
var random = new Random();
Enumerable.Range(0,30).ToList().ForEach(i => fooService.Add(new Foo(){Id=i,Type=(FooType)random.Next(0,3),FooName="Foo"+i}));
//select view models
fooService.Select(x => new FooVM
{
FooName = x.FooName,
Type = x.Type
}
).Dump();
}
public enum FooType
{
Red,
Green,
Blue
}
public class Foo
{
public int Id { get; set; }
public FooType Type { get; set; }
public string FooName { get; set; }
}
public class FooVM
{
public FooType Type { get; set; }
public string FooName { get; set; }
}