如何为联合连接和内部查询编写谓词?

时间:2014-09-18 10:22:49

标签: c# .net linq predicate

我有一个sql语句,我必须将其转换为谓词以传递给方法。

select * from applications
where IsSuspended = 0 
union
select * from Applications where
id not in 
(select ApplicationAssociationId from Applications where ApplicationAssociationId is not NULL )
and IsSuspended = 1

我的方法调用是这样的。我尝试了许多其他方式,但没有取得成功。 :(

var resultList = someinstance.GetAll(
                    app=> app.IsSuspended = false)
                    .Union(someinstance.GetAll(
                    xap=>!xap.Id.Contains((xap.ApplicationAssociationId !=null).select(xap.Id)))
                    ).ToList();


包含数据的表

enter image description here

预期结果

enter image description here

1 个答案:

答案 0 :(得分:2)

目前尚不清楚为什么你需要一个工会。不仅仅是"或"条件?

var query = applications.Where(
     x => !x.IsSuspended ||
          !applications.Any(y => x.Id == y.ApplicationAssociationId));

(在第二种情况下,没有必要检查IsSuspended是否为真,好像它是假的,它已经包含在第一种情况中。)