我广泛使用 Linqpad 来查询数据库。今天在两个结果集之间进行联合操作时出现以下错误。
'System.Linq.IQueryable 3[System.Int64,System.String]]' 类型的表达式
1[<>f__AnonymousType4
不是一个序列
以下是我执行的步骤顺序。
我正在使用 Oracle 数据库并使用 IQToolkit 在 LinqPad 中添加了一个连接。我有 2 个结构几乎相似的表。
Table1
Field1 int
Field2 long
Field3 string
Table2
Field2 long
Field3 string
除了“Field1”字段外,table2 在结构上与 Table1 相似。我想加入两个表中的数据。
var firstTableData = (from data in Table1
select new{Field2 = data.Feild2, Field3 = data.Field3});
var secondTableData = (from data in Table2
select new{Field2 = data.Field2,Field3 = data.Field3});
var combined = firstTableData.Union(secondTableData);
combined.Dump();
此时,Dump 显示来自两个表的组合数据。
现在,当我在连接中使用此组合数据与另一个查询时,例如
var newData = (from t3 in Table3
join c1 in combined on t3.Field2 equals c1.Field2
select {...});
在上面的查询中,我遇到了问题
The expression of type 'System.Linq.IQueryable`1[<>f__AnonymousType4`3[System.Int64,System.String]]' is not a sequence
我曾尝试调用combined.AsQueryable()、combined.AsEnumerable() 并尝试使用'Concat' 而不是'Union' 进行组合。
var combined = firstTableData.Concat(secondTableData);
似乎没有任何效果。
我有什么遗漏吗。这让我想知道 Dump() 方法没有任何此类抱怨。如果您需要更多信息,请告诉我。
堆栈跟踪 :
at IQToolkit.Data.Common.QueryBinder.ConvertToSequence(Expression expr)
at IQToolkit.Data.Common.QueryBinder.VisitSequence(Expression source)
at IQToolkit.Data.Common.QueryBinder.BindJoin(Type resultType, Expression outerSource, Expression innerSource, LambdaExpression outerKey, LambdaExpression innerKey, LambdaExpression resultSelector)
at IQToolkit.Data.Common.QueryBinder.VisitMethodCall(MethodCallExpression m)
at IQToolkit.ExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.DbExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.QueryBinder.VisitSequence(Expression source)
at IQToolkit.Data.Common.QueryBinder.BindJoin(Type resultType, Expression outerSource, Expression innerSource, LambdaExpression outerKey, LambdaExpression innerKey, LambdaExpression resultSelector)
at IQToolkit.Data.Common.QueryBinder.VisitMethodCall(MethodCallExpression m)
at IQToolkit.ExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.DbExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.QueryBinder.VisitSequence(Expression source)
at IQToolkit.Data.Common.QueryBinder.BindWhere(Type resultType, Expression source, LambdaExpression predicate)
at IQToolkit.Data.Common.QueryBinder.VisitMethodCall(MethodCallExpression m)
at IQToolkit.ExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.DbExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.QueryBinder.VisitSequence(Expression source)
at IQToolkit.Data.Common.QueryBinder.BindSelect(Type resultType, Expression source, LambdaExpression selector)
at IQToolkit.Data.Common.QueryBinder.VisitMethodCall(MethodCallExpression m)
at IQToolkit.ExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.DbExpressionVisitor.Visit(Expression exp)
at IQToolkit.Data.Common.QueryBinder.Visit(Expression exp)
at IQToolkit.Data.Common.QueryBinder.Bind(QueryMapper mapper, Expression expression)
at IQToolkit.Data.Common.QueryMapper.Translate(Expression expression)
at IQToolkit.Data.Common.QueryTranslator.Translate(Expression expression)
at IQToolkit.Data.EntityProvider.GetExecutionPlan(Expression expression)
at IQToolkit.Data.EntityProvider.Execute(Expression expression)
at IQToolkit.Data.EntitySession.SessionProvider.Execute(Expression expression)
at IQToolkit.Query`1.System.Collections.IEnumerable.GetEnumerator()
谢谢,萨蒂什