LINQクエリでuser_name()のような組み込みのSQL関数を使用することは可能ですか?そうでない場合、他のものを使用できますか?
質問する
20503 次
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 に答える