3

LINQクエリでuser_name()のような組み込みのSQL関数を使用することは可能ですか?そうでない場合、他のものを使用できますか?

4

2 に答える 2

7

プロバイダーによって異なります。たとえば、SQLServerに対するLINQto Entitiesでは、SqlFunctions-を使用できます。これには、Transact-SQLにUserName対応するメソッドがあります。USER_NAME()(他にも多くのメソッドとプロパティがあります。現在のユーザーの場合、たとえば、CurrentUserプロパティを使用するだけです。)

于 2012-07-26T06:22:21.173 に答える
4

編集

@jonSkeetの回答の拡張

SqlFunctionsクラス-LINQtoEntitiesクエリでデータベース内の関数を呼び出す共通言語ランタイム(CLR)メソッドを提供します。

使い方

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    // SqlFunctions.CharIndex is executed in the database.
    var contacts = from c in AWEntities.Contacts
                   where SqlFunctions.CharIndex("Si", c.LastName) == 1
                   select c;

    foreach (var contact in contacts)
    {
        Console.WriteLine(contact.LastName);
    }
}

対象:SqlFunctions.UserNameメソッドの 使用SqlFunctions.UserName ()


これがMSDNです: 方法:カスタムデータベース関数を呼び出す

  • データベースにカスタム関数を作成します。
  • .edmxファイルのストアスキーマ定義言語(SSDL)で関数を宣言します。関数の名前は、データベースで宣言されている関数の名前と同じである必要があります。
  • 対応するメソッドをアプリケーションコードのクラスに追加し、EdmFunctionAttributeをメソッドに適用します。属性のNamespaceNameパラメーターとFunctionNameパラメーターは、それぞれ概念モデルの名前空間名と概念モデルの関数名であることに注意してください。LINQの関数名解決では、大文字と小文字が区別されます。
  • LINQtoEntitiesクエリでメソッドを呼び出します。

カスタム機能を追加

[EdmFunction("SchoolModel.Store", "AvgStudentGrade")]
public static decimal? AvgStudentGrade(int studentId)
{
    throw new NotSupportedException("Direct calls are not supported.");
}

Linqクエリで

var students = from s in context.People
                   where s.EnrollmentDate != null
                   select new
                   {
                       name = s.LastName,
                       avgGrade = AvgStudentGrade(s.PersonID)
                   };
于 2012-07-26T06:22:41.027 に答える