corelibraries-devexpress-dot-dataaccess-dot-datafederation-efaf3ab1.md
A node that provides data with a SELECT query.
Namespace : DevExpress.DataAccess.DataFederation
Assembly : DevExpress.DataAccess.v25.2.dll
NuGet Package : DevExpress.DataAccess
public class SelectNode :
QueryNode
Public Class SelectNode
Inherits QueryNode
The following members return SelectNode objects:
The SelectNode objects are contained in the QueryNodeCollection accessible with the FederationDataSourceBase.Queries property.
You can create a Join federated query in the following ways:
This method uses the SelectNodeBuilder object that provides a fluent interface to build a query tree. A fluent interface allows you to create queries in a few lines of code.
The entry point is the Source.From method. It returns the SelectNodeBuilder instance.
The final point is the SelectNodeBuilder.Build method that returns the query object.
Follow the steps below to build a federated query:
SelectNode instance.The following code sample creates a federated data source with two federated queries from SQL and Excel data sources.
using DevExpress.DataAccess.DataFederation;
// ...
FederationDataSource federation = new FederationDataSource();
Source sourceProducts = new Source("Products", CreateSqlDataSource(), "Products");
Source sourceOrderDetail = new Source("OrderDetail", CreateExcelDataSource("SalesPerson.xlsx", "Data"));
Source sourceHeader = new Source("OrderHeader", CreateExcelDataSource("OrderHeaders.xlsx", "OrderHeader"));
SelectNode query1 = sourceProducts.From().Select("ProductName", "QuantityPerUnit", "UnitsInStock")
.Join(sourceOrderDetail, "[Products.ProductName] = [OrderDetail.ProductName]")
.Select("OrderDate")
.Build("ProductsOrderDetail");
SelectNode query2 = sourceHeader.From().Select("OrderID", "Status", "Description")
.Join(sourceOrderDetail, "[OrderHeader.OrderID] = [OrderDetail.OrderID]")
.Select("Quantity", "Extended Price")
.Build("OrderHeaderOrderDetail");
federation.Queries.AddRange(new[] { query1, query2 });
federation.Fill();
Imports DevExpress.DataAccess.DataFederation
' ...
Dim federation As New FederationDataSource()
Dim sourceProducts As New Source("Products", CreateSqlDataSource(), "Products")
Dim sourceOrderDetail As New Source("OrderDetail", CreateExcelDataSource("SalesPerson.xlsx", "Data"))
Dim sourceHeader As New Source("OrderHeader", CreateExcelDataSource("OrderHeaders.xlsx", "OrderHeader"))
Dim query1 As SelectNode = sourceProducts.From().
Select("ProductName", "QuantityPerUnit", "UnitsInStock").
Join(sourceOrderDetail, "[Products.ProductName] = [OrderDetail.ProductName]").
Select("OrderDate").Build("ProductsOrderDetail")
Dim query2 As SelectNode = sourceHeader.From().
Select("OrderID", "Status", "Description").
Join(sourceOrderDetail, "[OrderHeader.OrderID] = [OrderDetail.OrderID]").
Select("Quantity", "Extended Price").Build("OrderHeaderOrderDetail")
federation.Queries.AddRange( { query1, query2 })
federation.Fill()
This method builds a query tree by instantiating objects and adding them to the collections.
Follow the steps below to build a federated query:
SelectNode object for that data source.The following code sample creates a federated data source with a federated query from SQL and Excel data sources.
using DevExpress.DataAccess.DataFederation;
// ...
FederationDataSource federation = new FederationDataSource();
Source sourceProducts = new Source("Products", CreateSqlDataSource(), "Products");
Source sourceOrderDetail = new Source("OrderDetail", CreateExcelDataSource("SalesPerson.xlsx", "Data"));
var sourceNodeProducts = new SourceNode(sourceProducts, "Products");
var sourceNodeOrderDetail = new SourceNode(sourceOrderDetail, "OrderDetail");
var query = new SelectNode(sourceNodeProducts)
{
Alias = "ProductsOrderDetail",
SubNodes = {
new JoinElement {
Node = sourceNodeOrderDetail,
Condition = $"[{sourceNodeProducts.Alias}.ProductName] == [{sourceNodeOrderDetail.Alias}.ProductName]"
}
},
Expressions = {
new SelectColumnExpression(sourceNodeProducts, "ProductName"),
new SelectColumnExpression(sourceNodeProducts, "QuantityPerUnit"),
new SelectColumnExpression(sourceNodeOrderDetail, "OrderID"),
new SelectColumnExpression(sourceNodeOrderDetail, "OrderDate"),
new SelectColumnExpression(sourceNodeOrderDetail, "Quantity"),
new SelectColumnExpression(sourceNodeOrderDetail, "UnitPrice")
}
};
federation.Queries.Add(query);
federation.Fill();
Imports DevExpress.DataAccess.DataFederation
' ...
Dim federation As New FederationDataSource()
Dim sourceProducts As New Source("Products", CreateSqlDataSource(), "Products")
Dim sourceOrderDetail As New Source("OrderDetail", CreateExcelDataSource("SalesPerson.xlsx", "Data"))
Dim sourceNodeProducts = New SourceNode(sourceProducts, "Products")
Dim sourceNodeOrderDetail = New SourceNode(sourceOrderDetail, "OrderDetail")
Dim query = New SelectNode(sourceNodeProducts)
query.Alias = "ProductsOrderDetail"
query.SubNodes.Add(New JoinElement With {.Node = sourceNodeOrderDetail,
.Condition = $"[{sourceNodeProducts.Alias}.ProductName] == [{sourceNodeOrderDetail.Alias}.ProductName]"})
query.Expressions.Add(New SelectColumnExpression(sourceNodeProducts, "QuantityPerUnit"))
query.Expressions.Add(New SelectColumnExpression(sourceNodeOrderDetail, "OrderID"))
query.Expressions.Add(New SelectColumnExpression(sourceNodeOrderDetail, "OrderDate"))
query.Expressions.Add(New SelectColumnExpression(sourceNodeOrderDetail, "Quantity"))
query.Expressions.Add(New SelectColumnExpression(sourceNodeOrderDetail, "UnitPrice"))
federation.Queries.Add(query)
federation.Fill()
This code snippet demonstrates how to create a federated data source that uses a filter with a parameter.
Note
The complete sample project How to Create a Federated Data Source at Runtime is available in the DevExpress Examples repository.
using DevExpress.DataAccess.DataFederation;
// ...
FederationDataSource federation = new FederationDataSource();
Source source = new Source("excelSource", CreateExcelDataSource("SalesPerson.xlsx", "Data"));
var sourceNode = new SourceNode(source, "Orders");
var query = new SelectNode(sourceNode)
{
Alias = "excel",
Expressions = {
new SelectColumnExpression(sourceNode, "OrderID"),
new SelectColumnExpression(sourceNode, "OrderDate"),
new SelectColumnExpression(sourceNode, "Sales Person"),
new SelectColumnExpression(sourceNode, "ProductName"),
new SelectColumnExpression(sourceNode, "Extended Price")
},
FilterString = "[Orders.CategoryName] = ?cat",
};
federation.Queries.Add(query);
federation.Fill(new[] {
new DevExpress.DataAccess.Sql.QueryParameter("cat", typeof(string), "Seafood") });
Imports DevExpress.DataAccess.DataFederation
' ...
Dim federation As New FederationDataSource()
Dim source As New Source("excelSource", CreateExcelDataSource("SalesPerson.xlsx", "Data"))
Dim sourceNode = New SourceNode(source, "Orders")
Dim query = New SelectNode(sourceNode)
query.Alias = "excel"
query.Expressions.Add(New SelectColumnExpression(sourceNode, "OrderID"))
query.Expressions.Add(New SelectColumnExpression(sourceNode, "OrderDate"))
query.Expressions.Add(New SelectColumnExpression(sourceNode, "Sales Person"))
query.Expressions.Add(New SelectColumnExpression(sourceNode, "ProductName"))
query.Expressions.Add(New SelectColumnExpression(sourceNode, "Extended Price"))
query.FilterString = "[Orders.CategoryName] = ?cat"
federation.Queries.Add(query)
federation.Fill( {
New DevExpress.DataAccess.Sql.QueryParameter("cat", GetType(String), "Seafood") })
See Also