Exception DA when linq "Take" and count

Hello,
on Visual Studio 2017, winform client (DA to custom server) i have a exception with linq “Take”.
I have installed last beta RemObjects Data Abstract for Visual Studio, Server Edition - 9.4.0.1359.

var result =
(from o in DataAdapter.GetTable<generic_order>()
where

join alerts in DataAdapter.GetTable<generic_alert>()
on o.id equals alerts.id_order into alertsorder
select new
ViewOrder
{
id = o.id,
status = o.status,
datetime_created = o.datetime_created,

alerts_count = alertsorder.Count(),
});
return result.Take(pagesize).ToList();

This query give this exception:

Si è verificata l’eccezione RemObjects.DataAbstract.DAException
HResult=0x80131500
Messaggio=An exception occurred on the server: Field “c0” not found
Origine= in RemObjects.DataAbstract.Server.Sql.QueryValidator.InternalValidateField(ValidatedFieldInfo fieldInfo)
in RemObjects.DataAbstract.Server.Sql.QueryValidator.VisitExpressionSelectItem(ExpressionSelectItem item)
in RemObjects.DataAbstract.Server.Sql.QueryExpressionVisitor.VisitSelectItem(SelectItem item)
in RemObjects.DataAbstract.Server.Sql.QueryValidator.VisitSelect(Select query)
in RemObjects.DataAbstract.Server.Sql.QueryExpressionVisitor.Visit(QueryExpression query)
in RemObjects.DataAbstract.Server.Sql.QueryExpressionVisitor.VisitOrderBy(OrderByQuery query)
in RemObjects.DataAbstract.Server.Sql.QueryExpressionVisitor.Visit(QueryExpression query)
in RemObjects.DataAbstract.Server.Sql.DASqlProcessor.GetData(String tableName, String sql, WhereExpression additionalWhere, DataParameter parameters, IAbstractConnection connection, ServiceSchema serviceSchema, DataStreamer streamer, Int32 maxRecords, Boolean allowPrivateAccess)
in RemObjects.DataAbstract.Server.DataAbstractService.GetDataViaDASql(String tableName, TableRequestInfoV6 requestInfo, DataStreamer streamer, Boolean allowPrivateAccess)
in RemObjects.DataAbstract.Server.DataAbstractService.InternalGetData(String tableNames, TableRequestInfo requestInfo, DataStreamer streamer, Boolean allowPrivateAccess)
in RemObjects.DataAbstract.Server.DataAbstractService.GetData(String tableNames, TableRequestInfo requestInfo)
in RemObjects.DataAbstract.Server.DataAbstractService_Invoker.Invoke_GetData(IROService __Instance, IMessage __Message, IServerChannelInfo __ServerChannelInfo, ResponseOptions& __oResponseOptions)
in RemObjects.SDK.Server.ServerChannel.InvokeMethod(IMessage message, IServerChannelInfo channel, ServiceInfo info)
in RemObjects.SDK.Server.ServerChannel.InvokeService(IMessage message, IServerChannelInfo channel)
Analisi dello stack:
in RemObjects.SDK.Message.ProcessException()
in RemObjects.SDK.BinMessage.InternalReadFromStream(Stream stream)
in RemObjects.SDK.Message.ReadFromStream(Stream stream)
in RemObjects.SDK.SuperHttpClientChannelWorker.DispatchMessage(Stream request, IMessage response)
in RemObjects.SDK.SuperHttpClientChannel.IntDispatch(Stream request, IMessage response)
in RemObjects.SDK.ClientChannel.Dispatch(IMessage message)
in RemObjects.SDK.DynamicRequest.InternalMakeRequest()
in RemObjects.SDK.DynamicRequest.MakeRequest()
in RemObjects.DataAbstract.Linq.LinqRemoteDataAdapter.FetchData(TableRequestInfo tableRequest, String tableNames, Action3 fillMethod) in RemObjects.DataAbstract.Linq.RemoteTable1.Execute(Expression expression, DataParameter parameters)
in RemObjects.DataAbstract.Linq.RemoteTable1.Execute(Expression expression) in RemObjects.DataAbstract.Linq.RemoteTableQuery1.GetEnumerator()
in System.Collections.Generic.List1..ctor(IEnumerable1 collection)
in System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

Same query with no count works.

var result =
(from o in DataAdapter.GetTable<generic_order>()
where

join alerts in DataAdapter.GetTable<generic_alert>()
on o.id equals alerts.id_order into alertsorder
select new
ViewOrder
{
id = o.id,
status = o.status,
datetime_created = o.datetime_created,

//alerts_count = alertsorder.Count(),
});
return result.Take(pagesize).ToList();

Same query with no “Take” works.

var result =
(from o in DataAdapter.GetTable<generic_order>()
where

join alerts in DataAdapter.GetTable<generic_alert>()
on o.id equals alerts.id_order into alertsorder
select new
ViewOrder
{
id = o.id,
status = o.status,
datetime_created = o.datetime_created,

alerts_count = alertsorder.Count(),
});
return result.ToList();

1 Like

Hello

Could you please provide the structure of tables used and specify the database driver used to access data?

Thanks in advance

I am using Postgres, in this case i am using custom DA server with NPGSQL.NET driver.

What is the structure of generic_order and generic_alert tables?

Can i send you in private?

Sure. You can send a mail to support@

Thanks, logged as bugs://79622

Hello

Thanks for the additional info. The issue is that Data Abstract cannot process the DA SQL query required to express the DA LINQ query with both .Take and .Count calls:

SELECT TOP (10) [t0].[id], [t0].[status], [t0].[datetime_created], [t0].[c0]
 FROM (
  SELECT [t1].[id], [t1].[status], [t1].[datetime_created], (
    SELECT COUNT(*)
     FROM [generic_alert] AS [t2]
     WHERE ([t2].[id_order] = [t1].[id])
    ) AS [c0]
   FROM [generic_order] AS [t1]
   WHERE ([t1].[id_customer] = 1)
) AS [t0]

I have logged this as a bug. Unfortunately due to the complexity of this issue I cannot give you any ETA when it will be fixed.

Sorry for the inconvenience

bugs://79622 got closed with status fixed.