指定演员无效。
OrderItemState是 enum 。
IEnumerable<OrderItemState> states = ...;
IEnumerable<byte> stateIds = Enumerable.Cast<byte>(states);
List<OrderEntry> entries =
(from m in dc.OrderItemMotions
where stateIds.Contains(m.OrderItemStateId)
select ...).ToList();
为什么?
StackTrace的一部分:
at System.Linq.Enumerable.d__b1
1.MoveNext() at System.Linq.Enumerable.<OfTypeIterator>d__aa
1.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) at System.Data.Linq.SqlClient.QueryConverter.VisitContains(表达式序列,表达式值) 在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) 在System.Data.Linq.SqlClient.QueryConverter.Visit(表达式节点) 在System.Data.Linq.SqlClient.QueryConverter.VisitWhere(表达式序列,LambdaExpression谓词) 在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) 在System.Data.Linq.SqlClient.QueryConverter.VisitWhere(表达式序列,LambdaExpression谓词) 在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) 在System.Data.Linq.SqlClient.QueryConverter.VisitGroupBy(表达式序列,LambdaExpression keyLambda,LambdaExpression elemLambda,LambdaExpression resultSelector) 在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) 在System.Data.Linq.SqlClient.QueryConverter.VisitJoin(Expression outerSequence,Expression innerSequence,LambdaExpression outerKeySelector,LambdaExpression innerKeySelector,LambdaExpression resultSelector) 在System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) 在System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(表达式节点) at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query,SqlNodeAnnotations annotations) at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) 在System.Data.Linq.DataQuery1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1来源)
答案 0 :(得分:2)
如果没有数据丢失,您无法将enum
投射到byte
,因此投射会失败(enum
是一个int
。
但如果您只想使用0-255范围内的值,则可以定义enum
以使用byte
:
public enum Values : byte { val1, val2};
答案 1 :(得分:0)
如果枚举的基类型是int(默认值),则可以将枚举转换为int。
如果枚举的基类型是一个字节,则可以将枚举转换为一个字节。
答案 2 :(得分:0)
您的枚举值中很可能包含一个不适合byte
的值。
假设此代码:
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:byte { first = 120, second };
如果符合以下条件,则无效:
enum MyEnum:long { first = 1204, second };