Попробовал сделать Union таблицы и наткнулся на такую проблему (упрощено до репродюса)
[TableName(Name="SomeTable")]
public abstract class SomeTable
{
// some abstract fields
}
var res = manager.GetTable<SomeTable>()
.Union(manager.GetTable<SomeTable>())
.ToList();
И получил
System.InvalidOperationException was unhandled
Message=Instances of abstract classes cannot be created.
Source=mscorlib
StackTrace:
at System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod(IRuntimeMethodInfo method)
at System.Reflection.Emit.DynamicMethod.CreateDelegate(Type delegateType, Object target)
at System.Dynamic.Utils.TypeExtensions.CreateDelegate(MethodInfo methodInfo, Type delegateType, Object target)
at System.Linq.Expressions.Compiler.LambdaCompiler.CreateDelegate()
at System.Linq.Expressions.Compiler.LambdaCompiler.Compile(LambdaExpression lambda, DebugInfoGenerator debugInfoGenerator)
at System.Linq.Expressions.Expression`1.Compile()
at BLToolkit.Data.Linq.Builder.ConcatUnionBuilder.UnionContext.BuildQuery[T](Query`1 query, ParameterExpression queryParameter) in C:\!Dev.Open\BLToolkit\Source\Data\Linq\Builder\ConcatUnionBuilder.cs:line 144
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.Build[T]() in C:\!Dev.Open\BLToolkit\Source\Data\Linq\Builder\ExpressionBuilder.cs:line 164
at BLToolkit.Data.Linq.Query`1.GetQuery(IDataContextInfo dataContextInfo, Expression expr) in C:\!Dev.Open\BLToolkit\Source\Data\Linq\Query.cs:line 130
at BLToolkit.Data.Linq.Table`1.GetQuery(Expression expression, Boolean cache) in C:\!Dev.Open\BLToolkit\Source\Data\Linq\TableT.cs:line 106
at BLToolkit.Data.Linq.Table`1.Execute(IDataContextInfo dataContextInfo, Expression expression) in C:\!Dev.Open\BLToolkit\Source\Data\Linq\TableT.cs:line 98
at BLToolkit.Data.Linq.Table`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() in C:\!Dev.Open\BLToolkit\Source\Data\Linq\TableT.cs:line 191
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
....
Здравствуйте, Danchik, Вы писали:
D>И еще вопрос. Не правильнее ли генерить UNION ALL вместо простого UNION?
Нет, не правильнее. UNION ALL — это скорее линковый Concat.
Здравствуйте, fddima, Вы писали:
F>Здравствуйте, Danchik, Вы писали:
D>>И еще вопрос. Не правильнее ли генерить UNION ALL вместо простого UNION? F> Нет, не правильнее. UNION ALL — это скорее линковый Concat.
Linq To Object — Union == UNION ALL
Linq To SQL — Union == UNION
Linq To SQL — Concat == UNION ALL
Как бы понимаеш разницу. Но что то таки не нравится Nevermind
Здравствуйте, Danchik, Вы писали:
D>Linq To Object — Union == UNION ALL
Ээээ — это как? С чего бы? Если хочешь соединить две последовательности — всегда используй Concat.
Я вот недавно по ошибке написал Union, и вместо 5-ти элементов массива из Type, имел 4.
Здравствуйте, fddima, Вы писали:
D>>И еще вопрос. Не правильнее ли генерить UNION ALL вместо простого UNION? F> Нет, не правильнее. UNION ALL — это скорее линковый Concat.
100% Concat
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
D>>>И еще вопрос. Не правильнее ли генерить UNION ALL вместо простого UNION? F>> Нет, не правильнее. UNION ALL — это скорее линковый Concat. IT>100% Concat
Это такой дурацкий оборот речи.