私は、特定の基準で結果セットをフィルタリングするための可能な方法を見つけるのに苦労してきました。そのうちの1つは全文検索です。スキミングした後、Linqが直接サポートしていないことを知ったブログはほとんどなく、回避策があります。
そのため、そのアプローチから始めましたが、.net 4.0ではテーブル値関数を使用できません(.net 4.5はサポートしていますが、現在は使用できません(関数のインポート))。
次に、ssdlファイルを編集して関数の詳細を追加することでカスタム関数を使用する別の回避策に出くわします(カスタムクエリにコマンドテキストを使用)。
私のUDFは以下のようになります:-
CREATE FUNCTION udf_CandidateFTS
(
@keywords nvarchar(4000)
)
RETURNS @resCandidates TABLE
(
CandidateID INT,
FileRank INT
)
AS
BEGIN
INSERT INTO @resCandidates
(
CandidateID,
FileRank
)
SELECT c.CandidateID, fileContent.Rank as FileRank
FROM CONTAINSTABLE (FileContent, Content, @keywords) as fileContent
INNER JOIN [file] f on f.ContentID = fileContent.[Key]
INNER JOIN [Candidate_Resume] c on c.CandidateID = f.[ID]
RETURN
END
SSDLファイルを編集しました:-
<Function Name="GetCandidateWithTextSearch" IsComposable="false">
<CommandText>
SELECT * from
dbo.udf_CandidateFTS(@keywords)
</CommandText>
<Parameter Name="keywords" Type="nvarchar" Mode="In" />
</Function>
そしてEDMFunctionを追加しました:-
public class MyFunctions
{
[EdmFunction("MMJ.Service.Data", "GetCandidateWithTextSearch")]
public static IList GetCandidateWithTextSearch(string keywords)
{
throw new NotSupportedException();
}
}
そして、他のフィルターと一緒に私は次のことをしたいです:-
var query = context.Candidate
.Where(c => c.ID.Equals(MyFunctions.GetCandidateWithTextSearch("wali")
.Contains(c.ID))).ToList();
親切に助けてください!