Хотя мой опыт 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
};
Я озадачен тем, для чего "это" в этих непрозрачных строках.Какой странный выбор кодового слова.
Конечно, если вы переключитесь на 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
};