簡體   English   中英

有沒有更有效的方法來執行Linq to EF查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM