次のように、TFS ビルドのテスト アセンブリ統計を含むテーブルがあります。
AssemblyName Duration TestResults MsPerResult Branch
Ass1.dll 100 2 50 $/branch1
Ass2.dll 200 2 100 $/branch1/sub1
Ass3.dll 400 2 200 $/branch1/sub1/subsub1
...
さらに、DataContext.ExecuteQuery<> の結果を保持するための要約クラスがあります。
public class AssemblyStatistics
{
public string AssemblyName { get; set; }
public int TestResultCount { get; set; }
public long ValueInMs { get; set; }
}
次のコードを実行すると、サブブランチのみをクエリする結果を制限しても、クエリには常に同じ時間がかかります。
context.ExecuteQuery<AssemblyStatistics>(
"SELECT TOP 10 AssemblyName, SUM(Duration) AS ValueInMs, SUM(TestResults) AS TestResultCount FROM AssembliesByDuration WHERE Branch LIKE {0} GROUP BY AssemblyName ORDER BY SUM(Duration) DESC", "$/branch1/sub1%").ToList();
ただし、次の (Web セーフではない) 形式を使用すると、ランタイムは予想どおりにダウンします
context.ExecuteQuery<AssemblyStatistics>(
@"SELECT TOP 10 AssemblyName, SUM(Duration) AS ValueInMs, SUM(TestResults) AS TestResultCount FROM AssembliesByDuration WHERE Branch LIKE '"
+ "$/branch1/sub1%" + "' GROUP BY AssemblyName ORDER BY SUM(Duration) DESC").ToList();
何か不足していますか、それとも後で LIKE を評価する Linq2SQL の問題ですか?