Skip to content

Instantly share code, notes, and snippets.

@FransBouma
Created September 14, 2015 15:50
Show Gist options
  • Save FransBouma/af671cf1279b9bfc794b to your computer and use it in GitHub Desktop.
Save FransBouma/af671cf1279b9bfc794b to your computer and use it in GitHub Desktop.
Generate complex linq queries to project graph of inheritance using entities to DTO object graph
//------------------------------------------------------------------------------
// <auto-generated>This code was generated by LLBLGen Pro v5.0.</auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InheritanceOneReverseEngineering.Linq;
using SD.LLBLGen.Pro.ORMSupportClasses;
namespace DTOs.Queries
{
/// <summary>Static class which contains methods for fetching instances of DTOs.DtoClasses.BoardMember</summary>
public static partial class BoardMemberQueries
{
/// <summary>Fetches all instances of DTOs.DtoClasses.BoardMember, using the IDataAccessAdapter instance specified.</summary>
/// <param name="adapter">The IDataAccessAdapter instance to use</param>
/// <returns>IQueryable containing DTOs.DtoClasses.BoardMember instances</returns>
public static IQueryable<DTOs.DtoClasses.BoardMember> FetchAll(IDataAccessAdapter adapter)
{
return Fetch(adapter, null);
}
/// <summary>Fetches all instances of DTOs.DtoClasses.BoardMember which match the where clause specified, using the IDataAccessAdapter instance specified.</summary>
/// <param name="adapter">The IDataAccessAdapter instance to use</param>
/// <param name="baseQueryWhereClause">The where clause expression to apply to the base query on the entity model. Can be null.</param>
/// <returns>IQueryable containing DTOs.DtoClasses.BoardMember instances</returns>
public static IQueryable<DTOs.DtoClasses.BoardMember> Fetch(IDataAccessAdapter adapter, System.Linq.Expressions.Expression<Func<InheritanceOneReverseEngineering.EntityClasses.BoardMemberEntity, bool>> baseQueryWhereClause)
{
var metaData = new LinqMetaData(adapter);
IQueryable<InheritanceOneReverseEngineering.EntityClasses.BoardMemberEntity> q = metaData.BoardMember;
if(baseQueryWhereClause != null)
{
q = q.Where(baseQueryWhereClause);
}
return Fetch(q);
}
/// <summary>Fetches all instances of DTOs.DtoClasses.BoardMember projected from the results of the specified baseQuery</summary>
/// <returns>IQueryable containing DTOs.DtoClasses.BoardMember instances</returns>
public static IQueryable<DTOs.DtoClasses.BoardMember> Fetch(IQueryable<InheritanceOneReverseEngineering.EntityClasses.BoardMemberEntity> baseQuery)
{
return baseQuery.Select(p__0 => new DTOs.DtoClasses.BoardMember()
{
CompanyCar = new DTOs.DtoClasses.BoardMemberTypes.CompanyCar()
{
Brand = p__0.CompanyCar.Brand,
CarId = p__0.CompanyCar.CarId,
},
CompanyCarId = p__0.CompanyCarId,
EmployeeId = p__0.EmployeeId,
ManagesDepartmentId = p__0.ManagesDepartmentId,
ManagesDepartmentName = p__0.ManagesDepartment.Name,
Name = p__0.Name,
StartDate = p__0.StartDate,
WorksForDepartment = new DTOs.DtoClasses.BoardMemberTypes.WorksForDepartment()
{
Employees = p__0.WorksForDepartment.Employees.OfType<InheritanceOneReverseEngineering.EntityClasses.EmployeeEntity>()
.Where(p__1 => !(p__1 is InheritanceOneReverseEngineering.EntityClasses.ManagerEntity) &&
!(p__1 is InheritanceOneReverseEngineering.EntityClasses.ClerkEntity) &&
!(p__1 is InheritanceOneReverseEngineering.EntityClasses.BoardMemberEntity))
.Select(p__1 => new DTOs.DtoClasses.BoardMemberTypes.WorksForDepartmentTypes.Employee()
{
Name = p__1.Name,
})
.ProjectionUnion(
p__0.WorksForDepartment.Employees.OfType<InheritanceOneReverseEngineering.EntityClasses.ManagerEntity>()
.Where(p__1 => !(p__1 is InheritanceOneReverseEngineering.EntityClasses.BoardMemberEntity))
.Select(p__1 => new DTOs.DtoClasses.BoardMemberTypes.WorksForDepartmentTypes.EmployeeManager()
{
ManagesDepartment = new DTOs.DtoClasses.BoardMemberTypes.WorksForDepartmentTypes.EmployeeManagerTypes.ManagesDepartment()
{
DepartmentId = p__1.ManagesDepartment.DepartmentId,
DepartmentType = p__1.ManagesDepartment.DepartmentType,
MeetingRoomCode = p__1.ManagesDepartment.MeetingRoomCode,
Name = p__1.ManagesDepartment.Name,
},
ManagesDepartmentId = p__1.ManagesDepartmentId,
}))
.ProjectionUnion(
p__0.WorksForDepartment.Employees.OfType<InheritanceOneReverseEngineering.EntityClasses.ClerkEntity>()
.Select(p__1 => new DTOs.DtoClasses.BoardMemberTypes.WorksForDepartmentTypes.EmployeeClerk()
{
JobDescription = p__1.JobDescription,
}))
.ProjectionUnion(
p__0.WorksForDepartment.Employees.OfType<InheritanceOneReverseEngineering.EntityClasses.BoardMemberEntity>()
.Select(p__1 => new DTOs.DtoClasses.BoardMemberTypes.WorksForDepartmentTypes.EmployeeBoardMember()
{
CompanyCarId = p__1.CompanyCarId,
}))
.ToList(),
Name = p__0.WorksForDepartment.Name,
},
WorksForDepartmentId = p__0.WorksForDepartmentId,
});
}
}
}
@FransBouma
Copy link
Author

ProjectionUnion is a custom extension method to overcome a limitation of LLBLGen Pro namely that it doesn't support Union queries, so ProjectionUnion is simply a wrapper around IEnumerable.Union(), so it makes sure the union takes place in-memory in the compiled lambda.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment