LINQ:链接1:M表和合并结果

时间:2011-07-03 04:56:59

标签: c# linq expression

我有

  1. table Users(使用User.Id和 例如)

  2. table Visibility(User1Id和User2Id,都是Users表的外键)

  3. table Contact(User.Id使用外键将1:1联系人与用户联系)。

  4. 可见性表应允许用户查看其他用户的联系人以及他们自己的联系人。为此,允许User1查看User2的联系人(但反之亦然)。

    现在,我正试图像这样查询,但显然它不起作用:

    Contact.Where(c => c.UserId == userId || c.UserId IN c.User.Visibilities) - 基本上我要做的就是返回1.所有具有提供的UserId的联系人记录(这很简单,当然已经可以工作)返回所有与其他用户关联但与用户提供的联系人通过可见性表中的User1:User2链接到该用户。

    要获得完整的示例:

    Users
    =====
    UserId     Name
    10         John
    15         Sasha
    20         Marcus
    
    Visibility
    ==========
    User1Id    User2Id
    10         20
    
    Contact
    =======
    ContactId  UserId  Zip
    1          10      23232
    2          15      55555
    3          20      92929
    

    根据用户1已经可以看到联系人{{1}的事实,我在查询UserID 10时从LINQ查询返回的内容是联系人310 },由于1表格也可以看到用户Visibility的联系人20

    3

    希望有道理吗?

1 个答案:

答案 0 :(得分:1)

Contact.Where(c=>c.UserId == userId || c.User.Visibilities.Any(v=>v.User1Id == userId))