【问题标题】:Linq to SQL NestedLinq to SQL 嵌套
【发布时间】:2016-01-30 16:03:28
【问题描述】:

我有 3 张桌子

工人(ID、CodeEm、姓名)

项目(ID、ProName、描述)

RetaleTbl(IDworker,IDProject)

当我选择一个项目时,我将显示所选项目中的工人和未选择项目中的工人。 以及所选项目中的此代码工作者

var selectedPro= from c in db.Worker 
                               from d in db.RetaleTbl
                               where d.IDProject== ID && c.ID == d.IDworker
                               select c;

这个代码工作人员不在选定的项目中(但我有问题,因为 RetaleTbl 表数据有 1 个工作人员做 2 个项目)

var firstFilter= from c in db.Worker 
                               from d in db.RetaleTbl
                               where d.IDProject != ID && c.ID == d.IDworker
                               select c;

现在我需要一个不在selectedPro 中的过滤器工人

【问题讨论】:

  • 试试这个where d.ProName != selectedPro && c.ID == d.IDworker
  • 感谢您的帮助,但来自 db.RetaleTbl 中的 d 没有 ProName 字段,我认为这可能是正确的,但有错误 var firstFilter= from c in db.Worker from d in db.RetaleTbl where d .IDProject != ID && c.ID == d.IDworker select c;
  • 对,试试这个where Project.First(p => p.ID == d.IDProject).ProName != selectedPro && c.ID == d.IDworker
  • 跟着你,我收到一个错误通知是:运算符'!='不能应用于'string'类型的操作数和IQueryable你能告诉我这是什么意思吗? ty
  • 猜测错误不在where 子句中。发布您的整个查询。

标签: c# asp.net-mvc linq linq-to-sql


【解决方案1】:

应该这样做。

var projectId= 2; // replace with a valid projectID value

var workersNotInProject = db.Worker.Where(c => !(db.RetaleTbl
                                  .Where(s => s.IDProject== projectId)
                                  .Select(d => d.IDWorker))
                         .Contains(c.ID)).ToList();

这基本上是 SQL 查询的 LINQ 版本

SELECT * FROM WORKER WHERE ID NOT IN ( SELECT WORKERID FROM RELATETBL WHERE PROJECTID=2 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多