11
using (RapidWorkflowDataContext context = new RapidWorkflowDataContext())
                    {
                        var query = from w in context.WorkflowInstances
                        from c in context.Workflows 
                         where EmpWorkflowIDs.Contains((int)w.ID) && w.CurrentStateID != c.LastStateID
                         select w;

                        return query.ToList();
                    }

我有 2 个表:Workflows 和 WorkflowInstances。

存储对象的工作流和存储实例的工作流实例。

工作流表:ID、名称、FirstStateID、LastStateID

WorkflowInstances 表:ID、名称、WorkflowID、CurrentStateID

如何在 linq to sql 中编写查询以从 WorkflowInstances 中选择 CurrentStateID 不等于 LastStateID 的实例

4

3 回答 3

13

您需要将联接修改为在 2 个表之间的相关列上,然后在 where 子句中添加条件,如下所示:

using (RapidWorkflowDataContext context = new RapidWorkflowDataContext())
                        {
                            var query = from w in context.WorkflowInstances
                                        join c in context.Workflows on w.WorkflowID equals c.ID
                                         where EmpWorkflowIDs.Contains((int)w.ID)
                                         && w.CurrentStateID != c.LastStateID
                                         select w;

                            return query.ToList();
                        }
于 2013-08-16T13:18:19.747 回答
5

如果您使用的是 lambda 表达式,那么not(!)就去那里:

.Where(p => !p.Whatever...)
于 2015-03-30T01:24:27.370 回答
0

你可以消除join它,它应该是这样的:

var query = from w in context.WorkflowInstances
            where !context.Workflows.Any(c => w.CurrentStateID != c.LastStateID) && EmpWorkflowIDs.Contains((int)w.ID)
            select w;
于 2013-08-16T13:22:11.863 回答