FindBy is now deprecated in favour of using FindAllBy.FirstOrDefault() or Get. More details here.
FindBy returns a single row of data as a SimpleRecord object based on at least one column name and value to filter by; if more than one row matches, the first row retrieved from the data store is returned.
There are two ways to form a FindBy method.
public SimpleRecord FindBy( Object[] filterExpressions ) public SimpleRecord FindBycolumnName1[AndcolumnName2…]( Object columnValue1 [, Object columnValue2] )
filterExpressionsobject[]columnName1[, columnName2, …, columnNameX]string
The name of the column(s) being filtered againstcolumnValue1[, columnValue2, …, columnValueX]object (typically string or int)
columnValueY contains the value with which column with name columnNameY should equal.Type: SimpleRecord
An object containing a property for each of the columns requested by Simple.Data whose values are those of the single row retrieved from the data store.
| Exception | Condition |
|---|---|
ArgumentException |
You have specified no named parameters for filterExpressions-or- The number of columnNames does not match the number of columnValues |
NullReferenceException |
One of the columnValues has been set to null |
FindBy is used to return data from a table based on a set of criteria where the value of columns in a row
Artistid=6 and Title="Back in Black"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 FindBy. If you have a column called, for example, HandlingCode, and you try to call
FindByHandlingCode(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,
FindBy(HandlingCode:1);
The following example retrieves the first album with GenreId equal to 1 and outputs its title to the Console window.
var album = Database.Open().Albums.FindByGenreId(1); // The named parameter equivalent call to FindBy() is // var album = Database.Open().Albums.FindBy(GenreId:1); Console.WriteLine(album.Title);
Simple.Data sends the following SQL to the database when album is evaluated.
SELECT TOP 1
[dbo].[Album].[AlbumId],
[dbo].[Album].[GenreId],
[dbo].[Album].[ArtistId],
[dbo].[Album].[Title],
[dbo].[Album].[Price],
[dbo].[Album].[AlbumArtUrl]
from [dbo].[Album]
where
[dbo].[Album].[GenreId] = @p1
@p1 (Int32) = 1
The following example retrieves the first album with GenreId equal to 1 and ArtistId equal to 120 and outputs its title to the Console window.
var album = Database.Open().Albums.FindByGenreIdAndArtistId(1,120); // The named parameter equivalent call to FindBy() is // var album = Database.Open().Albums.FindBy(GenreId:1,ArtistId:120); Console.WriteLine(album.Title);
Simple.Data sends the following SQL to the database when album is evaluated.
SELECT TOP 1
[dbo].[Album].[AlbumId],
[dbo].[Album].[GenreId],
[dbo].[Album].[ArtistId],
[dbo].[Album].[Title],
[dbo].[Album].[Price],
[dbo].[Album].[AlbumArtUrl]
from [dbo].[Album]
where
([dbo].[Album].[GenreId] = @p1 AND [dbo].[Album].[ArtistId] = @p2)
@p1 (Int32) = 1
@p2 (Int32) = 120