Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;指定的强制转换无效";在LinqToSql查询中_C#_Linq To Sql_Casting_Enums_.net - Fatal编程技术网

C# &引用;指定的强制转换无效";在LinqToSql查询中

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

指定的强制转换无效

OrderItemState是枚举

IEnumerable states=。。。;
IEnumerable stateId=可枚举的.Cast(状态);
列出条目=
(在dc.OrderItemMotions中从m开始)
其中stateId.Contains(m.OrderItemStateId)
选择….ToList();
为什么?

StackTrace的一部分:

在System.Linq.Enumerable.d_ub1
1.MoveNext()中
在System.Linq.Enumerable.d_uaa
1.MoveNext() 在System.Linq.Enumerable.whereSelectEnumerableInterator
2.MoveNext()中
位于System.Collections.Generic.List
1..ctor(IEnumerable
1集合)
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.DataQuery
1.System.Collections.Generic.IEnumerable.GetEnumerator()中
位于System.Collections.Generic.List
1..ctor(IEnumerable
1集合)
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 };