关于c#:Linq to SQL Joins

Linq to SQL Joins

本问题已经有最佳答案,请猛点这里访问。

Table Layout

我不熟悉linq to sql,我正在寻找一种简洁的方法,根据用户summonertable中的主键值"userid",从summonertable中获取一个summoners列表。usersummonertable中的每个summoner1-summoner5id都是引用summonertable中主键"id"的外键。我想使用usersummonerTable中的所有summonerID来获取summonerTable中所有对应的summoner。

事先谢谢!

编辑:我已经为引用所有列的每个表创建了对象,可以单独获取每个表,但希望有一种方法可以在一次选择中完成所有操作。

编辑:这让我接近我想要的,虽然我想把结果包装成一个具有ID和服务器属性的对象"summoner",但它非常混乱。我在玩弄一些人们建议的更简洁的形式,但我会继续阅读和尝试!如果有人有任何建议,他们会非常感激。一旦我按计划工作了,我就会给答案打上记号,或者在我完全弄明白之前,给人们一个让我走上正轨的好方法?

1
2
3
4
5
6
7
MyDataContext dc = new MyDataContext(ConfigurationManager.ConnectionStrings["StatServer"].ConnectionString);
        var t = (from user in dc.GetTable<UserSummoner>()
                where (user.UserId.Equals(id))
                select user).First();
        var summoners = (from summoner in dc.GetTable<SummonerTable>()
                         where (summoner.Id == t.Summoner1Id || summoner.Id == t.Summoner2Id || summoner.Id == t.Summoner3Id || summoner.Id == t.Summoner4Id || summoner.Id == t.Summoner5Id)
                         select new { summoner.Id, summoner.Server }).ToList();


这里有很多帖子,你也可以在谷歌上找到,你应该在问之前做很多搜索。

这里是

1
2
3
4
5
6
7
8
var q =
   from u in UserSummonerTable
    join s1 in SummonerTable on u.summoner1ID equals s1.id
    join s2 in SummonerTable on u.summoner2ID equals s2.id
    join s3 in SummonerTable on u.summoner3ID equals s3.id
    join s4 in SummonerTable on u.summoner4ID equals s4.id
    join s5 in SummonerTable on u.summoner5ID equals s5.id
    select new { u.id, s1.Name,s2.Name,s3.Name,s4.Name,s5.Name};


1
2
3
4
var q =
    (from s in SummonerTable
    join u in UserSummonerTable on s.Id equals u.UserId
    select new { s, u }).ToList();

这可能需要一些小的调整来获得预期的结果,但这应该大致做到。

另外,如果您对学习LINQ相关的东西感兴趣,那么msdn也有这个功能,这非常棒:http://code.msdn.microsoft.com/101-linq-samples-3fb9811b