主要课程:
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.Type' to' Namespace.ViewModel.Type'。存在显式转换(您是否错过了演员?)
我有转换它的问题。但我不知道应该做些什么。我错过了什么?任何帮助将非常感激。感谢
答案 0 :(得分:2)
该错误表明您在2个单独的命名空间中有一个名为Type
的枚举,即使您具有相同的值,它们仍然不同。
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,
});
答案 1 :(得分:1)
您的错误消息表明您已在enum FooType
和Namespace
中定义了Namespace.ViewModels
,因此无法在它们之间进行隐式转换。我建议您从Namespace.ViewModels
中删除定义,并在Namespace
中添加对Namespace.ViewModels
的引用(使用声明),或按照Trevor
答案 2 :(得分:0)
您的查询没有任何问题。我刚试过它。我会检查您的服务返回的实体。您可以在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; }
}