列で呼び出されるテーブルPersonTable
があります:PersonId, RestarauntId, Age
私はそれが行うと呼ばれるビューを持ってPersonView
います:
select PersonId,
RestarauntId,
RestarauntName(RestarauntId) as `RestarauntName`,
Age
FROM PersonTable
次のような簡単なことをするとき:
var persons = context.PersonView.Where(x=>x.PersonId == 1)
.Select(x=>
new {x.PersonId,
x.RestarauntId,
x.RestarauntName,
x.Age });
上記は 1 つのレコードを返し、MySql クエリは次のようになると予想されます。
SELECT PersonId, RestarauntId, RestarauntName, Age
FROM PersonView
WHERE PersonId = 1
ただし、代わりに、次のものが生成されます。
SELECT 1 AS `C1`, T.PersonId, T.RestarauntId, T.RestarauntName, T.Age
FROM
(SELECT PersonId, RestarauntId, RestarauntName, Age
FROM PersonView) AS T
WHERE T.PersonId = 1
そのため、where 句に何を渡すかは問題ではなく、常にすべてのレコードがサブセレクトで最初に取得されます。これは、必要なビューに対してクエリを実行した場合にのみ発生しますが、作成する予定のクエリではなく、上記のクエリを作成する理由に興味がありましたか? これは Entity Framework の問題ですか、それとも MySql の問題ですか?