2010-07-01 3 views
1

Как я могу сделать простое соединение с помощью LLBLGen?Внутренние соединения с использованием LLBLGen?

table1 - clientTable (адрес, телефон и т.д.) table2 - employeeTable (имя и т.д.) Таблица3 - clientEmployeeTable (ClientID, EmployeeID)

Я заполнить DataGrid с помощью EmployeeID с полями для информацию о клиенте (адрес, телефон и т. д.), и я не уверен, как я мог получить это, используя LLBLGen. Я полагаю, что могу создать хранимую процедуру, но, может быть, есть более простой способ?

Я совершенно новый с LLBLGen.

Я использовал хранимые процедуры, но, возможно, есть лучший способ.

// in stored proc 

SELECT (my specific fields) 
FROM [client].[List] abl 
    INNER JOIN [client].ClientGroup cg ON cg.ClientGroupId = abl.ClientGroupId 


// in code 
DataTable dt=RetrievalProcedures.GetEmployeeNote(EmployeeId); 
rgridNotes.DataSource = dt; 

ответ

0

Возможно, вы захотите создать несколько полей в соответствующих полях. Вы можете добавлять свойства ClientGroup к объекту Client для прозрачного доступа к ним. Это работает только для непосредственно связанных полей в отношении (m: 1). Если вы хотите присоединиться к ней глубже, вам нужно использовать типизированные списки.

Когда вы извлекаете сущности и хотите присоединиться из-за оператора where, вы можете использовать отношения для объединения таблиц и построения предиката.

С уважением

+0

Я думаю, я просто пытаюсь выяснить, как использовать тип отношений. Мне тяжело найти хорошую документацию на llblgen. –

+0

Что, кроме собственных документов LLBLGen и форумов поддержки пользователей - довольно часто цитируется здесь как одна из основных причин, чтобы пойти с LLBLGen :-) – Matt

1

Добро пожаловать в LLBLGen! Отличный продукт, когда вы учитесь. Один из способов получить информацию из разных объединенных таблиц - это типизированный список вашего собственного дизайна.

Ваши «мои конкретные поля» определяются в окне «Результаты». Предложение 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; 
}   

Хотя это кажется как много кода, чтобы сделать что-то Basic, код почти записывается сразу после того, как вы привыкли к нему, и намного быстрее, чем писать сантехнику. Ты никогда не вернешься.

0
Use LinqMetaData 

LinqMetaData metaData = new LinqMetaData(); 

if you use adapter mode 

LinqMetaData metaData = new LinqMetaData(adapter); 

var result = from a in metaData.TableA 
       join b in metaData.TableB on a.Key equals b.Key 
      where a.OtherField == value 
      select a;