2016-11-18 9 views
0

LINQでは、フルテキスト検索とIqueryable結果用に作成された内部結合カスタム関数を作成しようとしています。SQL:ネストされたクエリに適切なキーがありません

var sql_query = db.search(st); 
    var to_ret = from ts in sql_query 
       from t in table 
       where t.Id == ts.Value select t; 

    to_ret = to_ret.Include(x => x.table1) 
       .Include(x=> x.table2.Select(y=> y.table2Col)); 

    to_ret.select(-something-).toList(); 

SQLコード:私は適切なキー

LINQコードを持っていないto_ret.select(--something--).ToList()

ネストされたクエリにしようとすると、

はしかし、私は次のエラーを取得する

create function [dbo].[search] 
     (@keywords nvarchar(4000)) 
returns table 
as 
    return (
    select [key] from containstable(tb,(Name,Description),@keywords) 
) 
0 LINQコード上記の代わりに働く

コード:それは熱心にすべての比較

答えて

0

ためids LINQを使用してテーブルを結合しないでくださいロードとして

var ids = (from t in table join ts in db.search(st) on t.Id equals ts.Value select t.Id).ToList(); 

to_ret = to_ret.Where(x => ids.Contains(x.Id)); 

ただし、動作するコードは十分に効率的ではありませんそれは効果的ではありません。

結合されたすべての関数を[dbo]に含める必要があります。[検索]テーブル値関数(ビューなど)。それから、EFから[dbo] [[検索]]を呼び出してフィルタリングしてください。

私はmentionedにフルテキストテーブル値関数を結合しました。

クエリオプティマイザでは簡単ではないため、フルテキストと1つのクエリでのフィルタ処理に時間がかかることに注意してください。クエリオプティマイザは、テーブル全体に対して最初のフルテキストを実行してから、フィルタリングまたは逆の方法を選択します。

関連する問題