Создайте пользовательскую функцию на вашем SQL-сервере, которая будет эквивалентна вашему C # -коду.Скажем, он назывался "dbo.SatsFilter".
Создайте метод для переопределения текста данных, скажем, что он выглядит следующим образом:
public bool SatisfiesFilter(string name, string filter)
{
// some sort of implementation.
}
Украсьте метод C # с помощью [Function]
и [Parameter]
атрибуты, поэтому он выглядит примерно так:
[Function(Name="dbo.SatsFilter",IsComposable=true)]
public bool SatisfiesFilter([Parameter name="@name",DbType="nvarchar(50)"]string name, [Parameter name="@filter",DbType="nvarchar(50)"]string filter)
IsComposable=true
означает, что это функция, а не хранимая процедура, и, следовательно, может использоваться как часть более крупного запроса.
Вы можетеТеперь используйте этот метод DataContext, и он будет при необходимости преобразован в SQL, или C # будет использоваться в запросах, выполняемых в памяти.
Обратите внимание также, что если вы хотите использовать SQL все время(иногда полезно) вы могли бы вызывать в SQL, когда метод вызывается из кода C #:
[Function(Name="dbo.SatsFilter",IsComposable=true)]
public bool SatisfiesFilter([Parameter name="@name",DbType="nvarchar(50)"]string name, [Parameter name="@filter",DbType="nvarchar(50)"]string filter)
{
return (bool)ExecuteMethodCall(this, (MethodInfo)MethodInfo.GetCurrentMethod(), name, filter).ReturnValue;
}
Это не очень полезно, когда эквивалент C # удобен, так как это означает попадание в базу данных и некоторыеперевод, но это полезно, если пользовательская функция зависит от состояния базы данных или ее трудно хорошо перевести на C #