【问题标题】:How to do this Linq-to-Sql join?如何做这个 Linq-to-Sql 连接?
【发布时间】:2012-07-23 01:01:11
【问题描述】:

请不要在兰巴帮我帮忙

I have two tables. 
Employees:   
pk           
name        

ExpenseTeamMembers: 
pk                        
expMgrPk
empPk

Example: pk      expMgrPk     empPk     
     1         7          81
     2         7          101
     3         13         99
     4         13         22
     5         13         56

基本上,第一个表是员工列表,第二个表是用于跟踪哪些员工属于哪个经理的表。

第一个 sql 查找有效,mgr 在组合框中为我获取所选名称的 pk。

我在加入中尝试做的是查找 expMgrPk 并查看哪些员工属于它并返回他们的姓名而不是他们的 pk。我很忙,需要一点帮助。再次请不要在兰巴帮我!谢谢

    private void cboManagers_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboManagers != null)
        {
            string selectedMgr = (string)cboManagers.SelectedValue;

            using (DataClasses1DataContext db = new DataClasses1DataContext())
            {
                int mgr = (from f in db.employees
                          where f.name == selectedMgr
                          select f.pk).FirstOrDefault();

                var emps = (from m in db.employees
                            join t in db.expenseTeamMembers on m.pk equals t.pK
                            where t.expMgrPk == mgr
                            select m.name).ToList();
                lstSelected.DataSource = emps;
            }
        }
    }

【问题讨论】:

  • 如果您的关系设置正确,您永远不必直接处理 PK。
  • 您的加入应该是on m.pk equals t.empPk。另外,我没有在winforms中工作过,但是你不能在列表框中存储值和文本吗?这样您就可以避免mgr 查询,只需将列表框选定值传递给emps 查询。
  • 选定的管理器是组合框而不是列表框。我修复了我的equals,但它仍然无法正常工作。我想我还缺少一条线......

标签: c# winforms c#-4.0 linq-to-sql


【解决方案1】:

在 linq-to-sql 中,您可以通过编写两个 from 语句和一个 where 语句来更轻松地编写连接。像这样的:

var emps = (from f in db.employees
            from m in db.expenseTeamMembers
            where m.pk == mgr && f.pk == m.empPk
            select f.name).ToList();

我发现这种语法更简单,并且在编译您的代码时,查询将转换为传统的 T-SQL 连接。

【讨论】:

  • 试过了,这...不行... var emps = (from m in db.employees from t in db.expenseTeamMembers where t.pK == mgr && m.pk == t .empPk 选择 m.name).ToList();
  • 我会通过将变量 mgr 临时替换为经理的已知 pk 来调试您的查询,看看会发生什么。代码的语法是正确的,所以问题出在其他地方。您是否收到错误或查询没有返回任何内容?
  • 当你这样做时会发生什么(从 db.expenseTeamMembers 中的 m.pk == 1 选择 m.empPk).ToList();请注意,我放了 1,但将其替换为要测试的已知 ID。
  • 那时还不清楚:我写了 where m.pk == mgr && f.pk == m.empPk 以便 1)经理的 pk 等于 mgr 参数,然后 2)我正在将同一张表中的 empPk 与员工表的 pk 进行匹配,以便我可以使用 f.name 获取员工的姓名。
  • 您确实需要它,因为这是创建与员工表的连接的原因:我们希望经理和员工表的员工 ID 相同!!!帮助没问题,我得到了很多帮助,所以我知道这种感觉。编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多