-
Notifications
You must be signed in to change notification settings - Fork 113
Closed
Description
LINQ
repository.EngineeringCircuitEnds
.Where(x => ids.Contains(x.EngineeringCircuitID))
.Select(x => x.EngineeringConnectoRef)
.Distinct()
.Set(y => y.ConfirmedEndView, y => y.EngineeringCircuits.All(x => x.ConfirmedEndView))
.Update();SQL
UPDATE
[t2]
SET
[ConfirmedEndView] = (NOT EXISTS(
SELECT
*
FROM
[EngineeringCircuitEnd] [c]
WHERE
[t2].[EngineeringConnectorID] = [c].[EngineeringConnectorID] AND
NOT ([c].[ConfirmedEndView] = 1)
))
FROM
[EngineeringCircuitEnd] [x]
INNER JOIN [EngineeringConnector] [t2]
INNER JOIN [EngineeringCircuitEnd] [t1] ON [t2].[EngineeringConnectorID] = [t1].[EngineeringConnectorID]
ON [x].[EngineeringConnectorID] = [t2].[EngineeringConnectorID]
WHERE
[x].[EngineeringCircuitID] IN (4094837, 4095281, 4097457)Problems
- Operation 'ExecuteNonQuery' throws exception 'BLToolkit.Data.DataException: Incorrect syntax near the keyword 'NOT'.
- Following expression is not required and makes a performance impact: INNER JOIN [EngineeringCircuitEnd] [t1] ON [t2].[EngineeringConnectorID] = [t1].[EngineeringConnectorID]
Workarounds
A workaround for problem 1 is an explicit usage of "? true : false" like:
repository.EngineeringCircuitEnds
.Where(x => ids.Contains(x.EngineeringCircuitID))
.Select(x => x.EngineeringConnectoRef)
.Distinct()
.Set(y => y.ConfirmedEndView, y => y.EngineeringCircuits.All(x => x.ConfirmedEndView) ? true : false)
.Update();Generated file
//---------------------------------------------------------------------------------------------------
// This code was generated by BLToolkit.
//---------------------------------------------------------------------------------------------------
using System;
using System.Linq.Expressions;
using NUnit.Framework;
namespace SPX.DEF.FromTo.UnitTest
{
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
class <>c__DisplayClassc
{
public Int64[] ids;
}
}
namespace SPX.GCIS.Data.Sql
{
[BLToolkit.DataAccess.TableNameAttribute(Name = "EngineeringCircuitEnd")]
public class EngineeringCircuitEndRecord
{
[BLToolkit.Mapping.AssociationAttribute(ThisKey = "EngineeringConnectorID", OtherKey = "EngineeringConnectorID", CanBeNull = False)]
public SPX.GCIS.Data.Sql.EngineeringConnectorRecord EngineeringConnectoRef { get; set; }
[BLToolkit.DataAccess.PrimaryKeyAttribute((Int32)1)]
[BLToolkit.DataAccess.IdentityAttribute()]
public Int64 EngineeringCircuitID { get; set; }
public bool ConfirmedEndView { get; set; }
}
}
namespace SPX.GCIS.Data.Sql
{
[BLToolkit.DataAccess.TableNameAttribute(Name = "EngineeringConnector")]
public class EngineeringConnectorRecord
{
[BLToolkit.Mapping.AssociationAttribute(ThisKey = "EngineeringConnectorID", OtherKey = "EngineeringConnectorID", CanBeNull = False)]
public System.Collections.Generic.List<SPX.GCIS.Data.Sql.EngineeringCircuitEndRecord> EngineeringCircuits { get; set; }
public bool ConfirmedEndView { get; set; }
}
}
namespace Data.Linq
{
[TestFixture]
public class UserTest : TestBase
{
[Test]
public void Test()
{
// Table(EngineeringCircuitEndRecord).Where(x => value(SPX.DEF.FromTo.UnitTest.BlToolkitTesting+<>c__DisplayClassc).ids.Contains(x.EngineeringCircuitID)).Select(x => x.EngineeringConnectoRef).Distinct().Set(y => y.ConfirmedEndView, y => y.EngineeringCircuits.All(x => x.ConfirmedEndView)).Update()
ForEachProvider(db =>
Table(EngineeringCircuitEndRecord)
.Where<SPX.GCIS.Data.Sql.EngineeringCircuitEndRecord>(
(SPX.GCIS.Data.Sql.EngineeringCircuitEndRecord x) => value(SPX.DEF.FromTo.UnitTest.BlToolkitTesting+<>c__DisplayClassc).ids
.Contains<Int64>(
x.EngineeringCircuitID))
.Select<SPX.GCIS.Data.Sql.EngineeringCircuitEndRecord,SPX.GCIS.Data.Sql.EngineeringConnectorRecord>(
(SPX.GCIS.Data.Sql.EngineeringCircuitEndRecord x) => x.EngineeringConnectoRef)
.Distinct<SPX.GCIS.Data.Sql.EngineeringConnectorRecord>()
.Set<SPX.GCIS.Data.Sql.EngineeringConnectorRecord,bool>(
(SPX.GCIS.Data.Sql.EngineeringConnectorRecord y) => y.ConfirmedEndView,
(SPX.GCIS.Data.Sql.EngineeringConnectorRecord y) => y.EngineeringCircuits
.All<SPX.GCIS.Data.Sql.EngineeringCircuitEndRecord>(
(SPX.GCIS.Data.Sql.EngineeringCircuitEndRecord x) => x.ConfirmedEndView))
.Update<SPX.GCIS.Data.Sql.EngineeringConnectorRecord>());
}
}
}
Metadata
Metadata
Assignees
Labels
No labels