2010-07-01 38 views
0

我有一個相當複雜的查詢,我用LIKE語句過濾結果。下面是該查詢:如何改變最終表達式中2個ESQL where子句的條件?

var qsFilter = entities.QueryStatements.Where("it.Statement LIKE @searchTerm", 
    new ObjectParameter("searchTerm", searchTerm)); 
var qtFilter = entities.QueryTables.Where("it.TableNames LIKE @searchTables", 
    new ObjectParameter("searchTables", searchTerm)); 

然後:

var tables = from t in entities.TraceLines 
    join qs in qsFilter on t.QueryStatementHash equals qs.QueryStatementHash 
    join qt in qtFilter on qs.QueryTableHash equals qt.QueryTableHash 
    where t.CallTypeId == 64 
    orderby t.Sequence 
    select new 
    { 
     Name = qt.TableNames 
    }; 

的問題是,在最後的查詢,它生成AND子句爲2 LIKE過濾器:

WHERE ([Filter1].[Statement] LIKE @searchTerm) AND 
    ([Extent3].[TableNames] LIKE @searchTables) 

如何我得到那是一個子句?

注意:如果你想知道爲什麼我在這裏使用ESQL,正是因爲這樣的:How to use SQL 'LIKE' with LINQ to Entities?

回答

0

雖然我LinqToEntities的經驗是有限的,我的參考材料的解讀表明,這可能工作:

var joins = 
    from t in entities.TraceLines 
    join qs in entities.QueryStatements 
    on t.QueryStatementHash equals qs.QueryStatementHash 
    join qt in entities.QueryTables 
    on qs.QueryTableHash equals qt.QueryTableHash 
    select new {t, qs, qt}; 

var filtered = joins 
    .Where("it.Statement LIKE @searchTerm OR it.TableNames LIKE @searchTables" 
    new ObjectParameter("searchTerm", searchTerm) 
    new ObjectParameter("searchTables", searchTerm)) 
    .Where(x => x.t.CallTypeId == 64) 

var orderedAndProjected = 
    from x in filtered 
    order by x.t.Sequence 
    select new 
    { 
    Name = qt.TableNames 
    }; 

我很困惑這些不透明字符串中的「it」是什麼。碼字是多麼奇怪的選擇。


當然,如果切換到LinqToSql,你可以簡單地寫(不過你已經知道了):

var query = 
    from t in myDC.TraceLines 
    from qs in t.QueryStatements 
    from qt in qs.QueryTables 
    where t.CallTypeId == 64 
    where SqlMethods.Like(qs.Statement, searchTerm) 
    || SqlMethods.Like(qt.SearchTables, searchTerm) 
    order by t.Sequence 
    select new 
    { 
    Name = qt.TableNames 
    }; 
+0

我不知道什麼「它」是的那麼多。沒有它,我知道它不起作用。如果您查看調試器,它似乎是應用於查詢中當前正在引用的表的名稱。 – esac 2010-07-02 02:28:02