C# &引用;指定的强制转换无效";在LinqToSql查询中
指定的强制转换无效 OrderItemState是枚举C# &引用;指定的强制转换无效";在LinqToSql查询中,c#,linq-to-sql,casting,enums,.net,C#,Linq To Sql,Casting,Enums,.net,指定的强制转换无效 OrderItemState是枚举 IEnumerable states=。。。; IEnumerable stateId=可枚举的.Cast(状态); 列出条目= (在dc.OrderItemMotions中从m开始) 其中stateId.Contains(m.OrderItemStateId) 选择….ToList(); 为什么? StackTrace的一部分: 在System.Linq.Enumerable.d_ub11.MoveNext()中 在System.Lin
IEnumerable states=。。。;
IEnumerable stateId=可枚举的.Cast(状态);
列出条目=
(在dc.OrderItemMotions中从m开始)
其中stateId.Contains(m.OrderItemStateId)
选择….ToList();
为什么?
StackTrace的一部分:
在System.Linq.Enumerable.d_ub11.MoveNext()中
在System.Linq.Enumerable.d_uaa
1.MoveNext()
在System.Linq.Enumerable.whereSelectEnumerableInterator2.MoveNext()中
位于System.Collections.Generic.List
1..ctor(IEnumerable1集合)
at System.Linq.Enumerable.ToList[t源](IEnumerable
1源)
位于System.Data.Linq.SqlClient.QueryConverter.VisitContains(表达式序列,表达式值)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)中
位于System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点)
位于System.Data.Linq.SqlClient.QueryConverter.Visite(表达式节点)
位于System.Data.Linq.SqlClient.QueryConverter.VisitWhere(表达式序列,LambdaExpression谓词)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)中
位于System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点)
位于System.Data.Linq.SqlClient.QueryConverter.VisitWhere(表达式序列,LambdaExpression谓词)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)中
位于System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点)
位于System.Data.Linq.SqlClient.QueryConverter.VisitGroupBy(表达式序列、LambdaExpression键lambda、LambdaExpression elemLambda、LambdaExpression结果选择器)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)中
位于System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点)
位于System.Data.Linq.SqlClient.QueryConverter.VisitJoin(表达式outerSequence、表达式innerSequence、LambdaExpression outerKeySelector、LambdaExpression innerKeySelector、LambdaExpression resultSelector)
在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)中
位于System.Data.Linq.SqlClient.QueryConverter.VisitInner(表达式节点)
位于System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(表达式节点)
位于System.Data.Linq.SqlClient.SqlProvider.BuildQuery(表达式查询、SqlNodeAnnotations注释)
位于System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询)
在System.Data.Linq.DataQuery1.System.Collections.Generic.IEnumerable.GetEnumerator()中
位于System.Collections.Generic.List
1..ctor(IEnumerable1集合)
at System.Linq.Enumerable.ToList[t源](IEnumerable
1源)
如果枚举的基类型是int(默认值),则可以将枚举强制转换为int
如果枚举的基本类型是字节,则可以将枚举强制转换为字节。如果不丢失数据,则无法将
enum
强制转换为byte
,因此强制转换将失败(enum
是引擎盖下的int
)
但是,如果您只需要0-255范围内的值,可以使用以下方法定义枚举
,以便在引擎盖下使用字节
:
public enum Values : byte { val1, val2};
请参见此处:最有可能的一个枚举值包含无法放入
字节的值
假设此代码:
IEnumerable<MyEnum> arr = new MyEnum[] { MyEnum.first, MyEnum.second };
var bytes = Enumerable.Cast<byte>(arr);
foreach (var b in bytes)
{
Console.WriteLine(b);
}
如果:
enum MyEnum:long { first = 1204, second };
您确定枚举的支持类型实际上是一个字节
?如果没有,则需要执行“双转换”,例如(字节)(int)enumvalue
。
enum MyEnum:byte { first = 120, second };
enum MyEnum:long { first = 1204, second };