1

動的言語クエリによって生成するクエリがあります。問題は、初期データセットを自己結合すると、他のすべてのフィルターが最新のテーブルにあることです。イニシャルにしたいです。どうやってやるの?次に例を示します。

var result = dataContext.Person;
var initialData = result;
....
var subQuery = initialData.Where(String.Format(predicateEntityIn, entityPropertyName), subSelection);
report = report.Join(subQuery, propertyName, propertyName, "inner");
... 

次に、パラメータで初期データをフィルタリングしたい

report = report.Where(String.Format("{0} = {1}", "PersonId", paramValue));

内部結合がない場合、クエリは正しくフィルタリングされますが、内部結合を使用すると、初期タイプの最新のクエリでフィルタリングが実行され、選択は最新のテーブルで行われます。生成されるクエリは次のようなものです。

SELECT DISTINCT [t2].[Field1], [t2].[PersonId], [t2].[Field2]
FROM [dbo].[PersonDetails] AS [t0]
INNER JOIN [dbo].[Person] AS [t1] ON [t1].[PersonId] = [t0].[PersonId]
INNER JOIN [dbo].[PersonDetails] AS [t2] ON [t0].[PersonId] = [t2].[PersonId]
WHERE ([t2].[YearOfBirth] = 2012) 

しかし、私はそれを次のようにしたいと思います。

SELECT DISTINCT [t0].[Field1], [t0].[PersonId], [t0].[Field2]
FROM [dbo].[PersonDetails] AS [t0]
INNER JOIN [dbo].[Person] AS [t1] ON [t1].[PersonId] = [t0].[PersonId]
INNER JOIN [dbo].[PersonDetails] AS [t2] ON [t0].[PersonId] = [t2].[PersonId]
WHERE ([t0].[YearOfBirth] = 2012) 
4

1 に答える 1

0

問題はこの行にありました

report = report.Join(subQuery, propertyName, propertyName, "inner");

そのはず

report = report.Join(subQuery, propertyName, propertyName, "outer");
于 2012-12-10T14:32:31.773 に答える