CodeFluent Query Language (CFQL) allows to quickly create simple methods. CFQL provides support for common operations with Table Value Parameters.
To show result of queries we will use the following data:

IN
Using the IN operator you can exclude values that aren’t included in a list. For instance:
load(guid[] ids) WHERE Id IN (@ids)
The generated SQL procedure:
CREATE PROCEDURE [dbo].[Customer_LoadByIdsIn]
(
@ids [dbo].[cf_type_Customer_LoadByIdsIn_0] READONLY
)
AS
SET NOCOUNT ON
DECLARE @_c_ids int; SELECT @_c_ids= COUNT(*) FROM @ids
SELECT DISTINCT
[Customer].[Customer_Id],
[Customer].[Customer_Name],
[Customer].[Customer_DateOfBirth]
FROM [Customer]
WHERE [Customer].[Customer_Id] IN (((SELECT * FROM @ids)))
RETURN
GO
// John and Jane
CustomerCollection.LoadByIds(new int[] { 1, 2 });
// Empty result set
CustomerCollection.LoadByIds(new int[0]);
Equals (=)
Using the equals (=) operator you can exclude values that aren’t included in a list, but unlike the IN operator, when the list is empty no filter is applied. For instance:
load(guid[] ids) WHERE Id = @ids
The generated SQL procedure:
CREATE PROCEDURE [dbo].[Customer_LoadByIdsEquals]
(
@ids [dbo].[cf_type_Customer_LoadByIdsEquals_0] READONLY
)
AS
SET NOCOUNT ON
DECLARE @_c_ids int; SELECT @_c_ids= COUNT(*) FROM @ids
SELECT DISTINCT
[Customer].[Customer_Id],
[Customer].[Customer_Name],
[Customer].[Customer_DateOfBirth]
FROM [Customer] LEFT OUTER JOIN @ids AS _t_ids ON ((@_c_ids = 0)
OR (([Customer].[Customer_Id] = _t_ids.Item)))
WHERE ((@_c_ids = 0) OR (([Customer].[Customer_Id] = _t_ids.Item)))
RETURN
GO
// John and Jane
CustomerCollection.LoadByIds(new int[] { 1, 2 });
// John, Jane and Jimmy
CustomerCollection.LoadByIds(new int[0]);
Comparison operators: Like, StartsWith, greater than, freetext, etc.
You can use comparison operators between a single value and a TVP:
load(string[] names) WHERE Name STARTSWITH @names
The generated SQL procedure:
CREATE PROCEDURE [dbo].[Customer_LoadByNamesStartsWith]
(
@names [dbo].[cf_type_Customer_LoadByNamesStartsWith_0] READONLY
)
AS
SET NOCOUNT ON
DECLARE @_c_names int; SELECT @_c_names= COUNT(*) FROM @names
SELECT DISTINCT
[Customer].[Customer_Id],
[Customer].[Customer_Name],
[Customer].[Customer_DateOfBirth]
FROM [Customer] LEFT OUTER JOIN @names AS _t_names ON ((@_c_names = 0)
OR (([Customer].[Customer_Name] LIKE (_t_names.Item + '%'))))
WHERE ((@_c_names = 0)
OR (([Customer].[Customer_Name] LIKE (_t_names.Item + '%'))))
RETURN
GO
// Jane, John
CustomerCollection.LoadByNamesStartsWith(new string[] { "Ja", "Jo" });
// Jane, John and Jimmy
CustomerCollection.LoadByNamesStartsWith(new string[0]);
Custom
You can use RAW methods with Table Value Parameter. Here’s an example with inline SQL:
LOAD(string[] names) WHERE [EXISTS (SELECT * FROM @names AS n WHERE $Name$ = n.Item)]
The generated SQL procedure:
CREATE PROCEDURE [dbo].[Customer_LoadCustom]
(
@names [dbo].[cf_type_Customer_LoadCustom_0] READONLY
)
AS
SET NOCOUNT ON
DECLARE @_c_names int; SELECT @_c_names= COUNT(*) FROM @names
SELECT DISTINCT
[Customer].[Customer_Id],
[Customer].[Customer_Name],
[Customer].[Customer_DateOfBirth]
FROM [Customer]
WHERE EXISTS (
SELECT * FROM @names AS n WHERE [Customer].[Customer_Name] = n.Item
)
RETURN
GO
// Jane, John
CustomerCollection.LoadCustom(new string[] { "Jane", "John" });
// Empty result set
CustomerCollection.LoadCustom(new string[0]);
Happy Querying,
The R&D Team.