74 lines
3.2 KiB
C#
74 lines
3.2 KiB
C#
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
namespace PlanCompilerTests
|
|
{
|
|
using System.Data.Entity;
|
|
using System.Linq;
|
|
using AdvancedPatternsModel;
|
|
using Xunit;
|
|
|
|
/// <summary>
|
|
/// Tests for GroupBy statements in Linq queries.
|
|
/// </summary>
|
|
public class LinqGroupByTests : FunctionalTestBase
|
|
{
|
|
#region Infrastructure/setup
|
|
|
|
#endregion
|
|
|
|
#region Tests for GroupBy that trigger an aggregate pushdown
|
|
|
|
[Fact]
|
|
private void GroupBy_aggregate_pushdown_single_key()
|
|
{
|
|
using (var context = new AdvancedPatternsMasterContext())
|
|
{
|
|
var groupByQuery = from workOrder in context.WorkOrders
|
|
group new
|
|
{
|
|
workOrder.WorkOrderId,
|
|
workOrder.Details
|
|
} by workOrder.EmployeeId
|
|
into ordersByEmployeeGroup
|
|
select new
|
|
{
|
|
EmployeeId = ordersByEmployeeGroup.Key,
|
|
OrderCount = ordersByEmployeeGroup.Count(),
|
|
MaxOrderId = ordersByEmployeeGroup.Max(o => o.WorkOrderId)
|
|
};
|
|
var sql = groupByQuery.ToString();
|
|
Assert.True(sql != null && sql.ToUpper().Contains("GROUP BY"));
|
|
}
|
|
}
|
|
|
|
// Dev11 448362
|
|
[Fact]
|
|
private void GroupBy_aggregate_pushdown_translates_NewRecordOp()
|
|
{
|
|
using (var context = new AdvancedPatternsMasterContext())
|
|
{
|
|
var groupByNewQuery = from workOrder in context.WorkOrders
|
|
group new
|
|
{
|
|
workOrder.WorkOrderId,
|
|
workOrder.Details
|
|
} by new
|
|
{
|
|
workOrder.EmployeeId
|
|
}
|
|
into ordersByEmployeeGroup
|
|
select new
|
|
{
|
|
ordersByEmployeeGroup.Key.EmployeeId,
|
|
OrderCount = ordersByEmployeeGroup.Count(),
|
|
MaxOrderId = ordersByEmployeeGroup.Max(o => o.WorkOrderId)
|
|
};
|
|
var sql = groupByNewQuery.ToString();
|
|
Assert.True(sql != null && sql.ToUpper().Contains("GROUP BY"));
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|