【问题标题】:Linq to SQL Joins [duplicate]Linq to SQL 连接 [重复]
【发布时间】:2014-04-08 11:40:05
【问题描述】:

我是 Linq to SQL 的新手,我正在寻找一种简洁的方法来根据来自 UserSummonerTable 的主键值“UserId”从 SummonerTable 中获取 Summoner 列表。 UserSummonerTable 中的每个 Summoner1-Summoner5id 都是引用 SummonerTable 中的主键“Id”的外键。我想使用 UserSummonerTable 中的所有 SummonerId 来获取 SummonerTable 中所有对应的 Summoner。

提前致谢!

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

编辑:这让我接近我想要的,尽管我想将结果包装到一个具有 Id 和 Server 属性的对象“Summoner”中,而且它非常混乱。我正在玩一些人们建议的更简洁的表格,但无济于事,但我会继续阅读和尝试!如果有人有任何建议,他们将不胜感激。一旦我让它按预期工作,我就会标记一个答案,或者在我完全弄清楚之前给人们称赞让我走上正确的轨道是一种好习惯吗?

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();

【问题讨论】:

  • 5个外键是什么原因?看起来是个非常糟糕的主意。

标签: c# join linq-to-sql


【解决方案1】:

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

这里是

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

【讨论】:

  • 但是我必须补充一点,这违背了 ORM 的观点。您应该使用关联。更不用说你应该在新开发者上使用 EF 而不是 L2S。
  • @Aron 你想解释一下你的暗号
  • var q = Context.UserSummonerTable.Include(x =&gt; x.Summoner1).Include(x =&gt; x.Summoner2)...。然而,我现在意识到,即使这是一个愚蠢的想法。您应该使用一对多的关系。 var q = Context.User.Include(x =&gt; x.Summoners)
【解决方案2】:
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

【讨论】:

  • 感谢您的回复,遗憾的是我认为这不会奏效。我正在尝试做的是这样的事情。 var q = (from s in dc.SummonerTables join u in dc.UserSummonerTables on s.Id 等于 (u.Summoner1Id||u.Summoner2Id|||u.Summoner2Id|||u.Summoner3Id|||u.Summoner4Id|| |u.Summoner5Id) 选择新的 { s, u }).ToList();谢谢你的链接,我会读一遍!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2014-08-25
相关资源
最近更新 更多