[英]Is there a more efficient way to do this Linq to EF query?
有沒有更有效的方法來執行此查詢?
var subscriptions = from user in Db.User
from city in Db.City
where user.City.Select(x => x.Id).Contains(city.Id)
&& user.Id == User.Id
select city.Id;
產生的陳述
SELECT
[Extent2].[Id] AS [Id]
FROM [dbo].[User] AS [Extent1]
CROSS JOIN [dbo].[City] AS [Extent2]
WHERE ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[UserCity] AS [Extent3]
WHERE ([Extent1].[Id] = [Extent3].[UserId]) AND ([Extent3].[CityId] = [Extent2].[Id])
)) AND ([Extent1].[Id] = @p__linq__0)
尼克(Nick)解釋了其多對多關系,因此在假設設計合理的基礎上修改答案。
您將需要一個中間表來適當地管理它。 我將組成一個未列出的表,因為它必須包含此表才能使該設計有意義。
假設有一張桌子:
table CitiesAndUsers
column cityId int
column userId int
假定cityID和userID是它們各自表的組合鍵和外鍵
現在為lamda
var subscriptions = Db.CitiesAndUsers.Where(cu => cu.User.Id == User.Id).Select(cu => cu.City.id);
說得通?
我認為您可以在拖曳表之間創建一個關系,以簡化此操作:
Db.User.City.Select(x => x.Id)
但是如果您被迫在沒有任何關系的情況下這樣做,我只是說您可以通過您的解決方案來做到這一點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.