Simple.Data

Simple.Data defines a number of commands for retrieving data from a data store. These can then be daisychained in a LINQ-like fashion with further methods to modify the basic query.

ExistsBy

ExistsBy returns a boolean value based on whether a search returns any values based on at least one column name and value to filter by. AnyBy is a synonym for ExistsBy.

There are two ways to form a ExistsBy method.

Syntax

public bool ExistsBy(
		Object[] filterExpressions
	)

public bool ExistsBycolumnName1[AndcolumnName2…](
	Object columnValue1
	[, Object columnValue2]
)

Parameters

filterExpressions
Type: object[]
A set of named parameters where the parameter name is that of column being filtered against and the parameter value is that which the column should equal.
columnName1[, columnName2, …, columnNameX]
Type: string The name of the column(s) being filtered against
columnValue1[, columnValue2, …, columnValueX]
Type: object (typically string or int) columnValueY contains the value with which column with name columnNameY should equal.

Return Value

Type: bool
A value indicating whether records exists in the table that satisfy the given conditions.

Exceptions

Exception Condition
UnresolvableObjectException ExistsBy is called on a table that doesn’t exist
ArgumentException The number of columnValues does not match the number of columnNames or no arguments at all have been passed to the method.
FormatException The type of a columnValue does not match the actual type of the corresponding columnName

Note that issues #318, #319, and #320 are still open with regards to exceptions thrown by ExistsBy.

Remarks

ExistsBy is used to determine whether data exists in a table based on a set of criteria where the value of columns in a row

If you wish to include a column name in a filter that contains the string “and” in it, you must use the named parameter form of ExistsBy. If you have a column called, for example, HandlingCode, and you try to call

ExistsByHandlingCode(1);

the parser will split that into two columns, H & lingCode, and throw an ArgumentException. So you have to use the named parameter form for columns with “and” in the name. For example,

ExistsBy(HandlingCode:1);

Examples

One Criteria

The following example returns true if there are any records in the Albums table with GenreId equal to 1.

bool albumExists = Database.Open().Albums.ExistsByGenreId(1);
	
// The named parameter equivalent call to ExistsBy() is
// bool albumExists = Database.Open().Albums.ExistsBy(GenreId:1);

// Also equivalent are
// bool albumExists = Database.Open().Albums.AnyByGenreId(1);
// bool albumExists = Database.Open().Albums.AnyBy(GenreId:1);

Simple.Data sends the following SQL to the database when albumExists is evaluated.

select DISTINCT 1 from [dbo].[Albums]  
WHERE 
   [dbo].[Albums].[GenreId] = @p1
@p1 (Int32) = 1

Two Criteria

The following example returns true if there are any records in the Albums table with GenreId equal to 1 and ArtistId equal to 120.

bool albumExists = Database.Open().Albums.ExistsByGenreIdAndArtistId(1,120);
	
// The named parameter equivalent call to ExistsBy() is
// bool albumExists = Database.Open().Albums.ExistsBy(GenreId:1,ArtistId:120);

// Also equivalent are
// bool albumExists = Database.Open().Albums.AnyByGenreIdAndArtistId(1,120);
// bool albumExists = Database.Open().Albums.AnyBy(GenreId:1,ArtistId:120);

Simple.Data sends the following SQL to the database when albumExists is evaluated.

select DISTINCT 1 from [dbo].[Albums] 
WHERE 
    ([dbo].[Albums].[GenreId] = @p1 AND [dbo].[Albums].[ArtistId] = @p2)
@p1 (Int32) = 1
@p2 (Int32) = 120