C# Linq到SQL连接

C# Linq到SQL连接,c#,join,linq-to-sql,C#,Join,Linq To Sql,我是LinqtoSQL的新手,我正在寻找一种简洁的方法,根据UserCallerTable中的主键值“UserId”,从CallerTable中获取召唤器列表。UserCallerTable中的每个Caller1-Caller5ID都是外键,引用了来自CallerTable的主键“Id”。我想使用usercallerTable中的所有召唤器ID来获取召唤器Table中所有相应的召唤器 提前谢谢 编辑:我已经为每个表创建了引用所有列的对象,并且可以单独获取每个表,但是我希望能够在一次选择中完成所有

我是LinqtoSQL的新手,我正在寻找一种简洁的方法,根据UserCallerTable中的主键值“UserId”,从CallerTable中获取召唤器列表。UserCallerTable中的每个Caller1-Caller5ID都是外键,引用了来自CallerTable的主键“Id”。我想使用usercallerTable中的所有召唤器ID来获取召唤器Table中所有相应的召唤器

提前谢谢

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

编辑:这让我接近我想要的,虽然我想把结果包装成一个带有Id和服务器属性的对象“召唤器”,而且非常混乱。我正在玩弄一些人们建议的更简洁的形式,但没有用,但我会继续阅读和尝试!如果有人有任何建议,我们将不胜感激。一旦我让它按预期运行,我就会给出一个答案,或者在我完全弄明白之前,给人们一个让我走上正确轨道的信任,这是一种良好的做法吗

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();
MyDataContext dc=新的MyDataContext(ConfigurationManager.ConnectionString[“StatServer”].ConnectionString);
var t=(来自dc.GetTable()中的用户)
其中(user.UserId.Equals(id))
选择user.First();
var召唤器=(来自dc.GetTable()中的召唤器)
其中(caller.Id==t.caller1id | | | caller.Id==t.caller2id | | caller.Id==t.caller3id | | caller.Id==t.caller4id | | caller.Id==t.caller5id)
选择新的{courger.Id,courger.Server}).ToList();
这可能需要一些小的调整来获得您想要的结果,但这应该可以大致做到

此外,如果您对学习LINQ相关的内容感兴趣,MSDN有以下功能,非常棒:

这里有很多帖子,你也可以在谷歌上找到,你应该在询问之前进行大量搜索

这是

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};

谢谢你的回复,很遗憾,我认为这是行不通的。我想做的是这样的事情。var q=(从dc.CalluerTables中的s加入s.Id上的dc.UserCalluerTables等于(u.Calluer1ID | | u.Calluer2ID | | | | | u.Calluer3ID | | u.Calluer4ID | | | u.Calluer5ID)选择新的{s,u})。ToList();谢谢你的链接,我会仔细阅读的!然而,我必须补充一点,这违背了ORM的观点。你应该使用关联。更不用说你应该在新开发中使用EF而不是L2S了。@Aron你想解释一下你的代码吗
var q=Context.usercourgertable.Include(x=>x.courger1)。Include(x=>x.courger2)…
。然而,现在我突然意识到,即使这也是一个愚蠢的想法。你应该使用一对多的关系
var q=Context.User.Include(x=>x.callers)
5个外键的原因是什么?看起来是个很糟糕的主意。
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};