【问题标题】:Linq2sql join query to show list of names but only show ones that have record in another tableLinq2sql 连接查询以显示名称列表,但仅显示在另一个表中有记录的名称
【发布时间】:2012-05-05 16:51:03
【问题描述】:

我有一张员工表,我目前正在用该表中的姓名填充组合框。我还有一个名为expenseHdr 的相关表,其中包含员工pk。我的表结构如下所示:

employees     expenseHdr
empPk         expPk
name          expenseType
              empPk

现在它正在过滤名称,但它正在重复其在费用 Hdr 中的每条记录的名称。我怎样才能让它只显示每个名字一次?谢谢!

var emps = (from emp in db.employees
                        join exp in db.expenseHdrs on emp.pk equals exp.empPk
                        where emp.active == true 
                        orderby emp.name
                        select emp.name.Substring(0, 20)).ToList();
            cboEmployee.DataSource = emps;

【问题讨论】:

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


    【解决方案1】:

    您可以使用Any()

    var emps = (from emp in db.employees
                            where emp.active && emp.expenseHdrs.Any()
                            orderby emp.name
                            select emp.name.Substring(0, 20)).ToList();
                cboEmployee.DataSource = emps;
    

    如果表之间没有数据库关系,您将改为编写:

    where emp.active && db.expenseHdrs.Any(exp => emp.pk == exp.empPk)
    

    【讨论】:

    • where emp.active && db.expenseHdrs.Any(exp => emp.pk == exp.empPk) 如果不使用 lambda 会怎样?
    • emp.active && (from x in db.expenseHdrs where x.pk == exp.empPk select x).Any()
    • 有时 lambda 更短更优雅,这就是其中之一。改用 lambda,它更短且易读
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多