Добро пожаловать в LLBLGen! Отличный продукт, как только вы учитесь. Один из способов получения информации из множества объединенных таблиц - это типизированный список вашего собственного дизайна.
Ваши "мои конкретные поля" определены в ResultsetFields. Ваше предложение WHERE определяется с помощью выражения IPredicateExpression. Ваши предложения JOIN блестяще обрабатываются IRelationCollection и свойствами .Relations каждого объекта.
При попытке ускориться запуск профилировщика SQL Server (при условии, что вы используете MSSQL) является ключевым для того, чтобы увидеть, как изменения вашего кода в LLBLGen влияют на фактический SQL, запрашиваемый с сервера. Управление всеми () в предложениях JOIN и WHERE иногда требует тщательного упорядочения, но большую часть времени работает с первой попытки. Вот общий фрагмент, который мы используем:
private static DataTable GetTheGoodsOnEmployeeClients()
{
// Define the fields that you want in your result DataTable
ResultsetFields fields = new ResultsetFields(2);
fields.DefineField(MyEntityFields.FieldName1, 0);
fields.DefineField(MyEntityFields.FieldName2, 1, "Field Name Alias");
// Add the WHERE clause to the query - "Condition" can be a literal or a variable passed into this method
IPredicateExpression filter = new PredicateExpression();
filter.Add(MyEntityFields.FieldName == "Condition");
// Add all JOIN clauses to the relation collection
IRelationCollection relations = new RelationCollection();
relations.Add(MyEntity.Relations.FKRelationship);
relations.Add(MyEntity.Relations.FKRelationship, JoinHint.Left);
ISortExpression sort = new SortExpression();
sort.Add(MyEntityFields.FieldName | SortOperator.Ascending);
// Create the DataTable, DAO and fill the DataTable with the above query definition/parameters
DataTable dt = new DataTable();
TypedListDAO dao = new TypedListDAO();
dao.GetMultiAsDataTable(fields, dt, 0, sort, filter, relations, false, null, null, 0, 0);
return dt;
}
Ваша конкретная потребность:
SELECT (my specific fields)
FROM [client].[List] abl
INNER JOIN [client].ClientGroup cg ON cg.ClientGroupId = abl.ClientGroupId
Таким образом, станет:
private static DataTable GetTheGoodsOnEmployeeClients()
{
// Define the fields that you want in your result DataTable
ResultsetFields fields = new ResultsetFields(3);
fields.DefineField(ClientFields.ClientId, 0);
fields.DefineField(ClientFields.ClientName, 1, "Client");
fields.DefineField(ClientGroupFields.ClientGroupName, 2, "Group");
// Add all JOIN clauses to the relation collection
IRelationCollection relations = new RelationCollection();
relations.Add(ClientEntity.Relations.ClientGroupEntityUsingClientGroupId);
// Create the DataTable, DAO and fill the DataTable with the above query definition/parameters
DataTable dt = new DataTable();
TypedListDAO dao = new TypedListDAO();
dao.GetMultiAsDataTable(fields, dt, 0, null, null, relations, false, null, null, 0, 0);
return dt;
}
Хотя этот кажется подобным большому количеству кода для выполнения чего-то базового, код почти сам записывается, как только вы к нему привыкли, и значительно быстрее, чем написание сантехники. Ты никогда не вернешься.