我正在使用linq-to-nhibernate和流利的(c#),我想做以下事情:
我有两个IQueryable
接口,relations
和documentsrelations
。
relations
对象包含企业列表,documentsrelations
对象包含第二个企业列表。
我想生成一个新的企业列表,其中包含企业列表(relations
)减去第二个企业列表(documentsrelations
)。
在sql中我会尝试使用外连接,但我不知道如何处理它。
****声明****
IQueryable<EnterpriseRelation> documentsrelations =
shared_doc.SharedIn.AsQueryable();
var relations = EnterpriseRelationService
.QueryRelationsForEnterprise(LoggedUser.ActiveAsEnterprise)
.Where(x => x.ContactingEnterprise.NIF == LoggedUser.ActiveAsEnterprise.NIF);
relations
也是IQueryable<EnterpriseRelation>
。
我试过倍增的东西,但它总是告诉我它不受支持。
一些帮助?
谢谢!
答案 0 :(得分:0)
假设您的实体主键是Id
,您是否尝试过类似下面的内容?
var relations = EnterpriseRelationService
.QueryRelationsForEnterprise(LoggedUser.ActiveAsEnterprise)
.Where(x => x.ContactingEnterprise.NIF == LoggedUser.ActiveAsEnterprise.NIF)
.Where(x => !documentsrelations.Select(dr => dr.Id).Contains(x.Id));
注意:强>
在问题中使用.AsQueryable()
大部分时间都是错误的。如果SharedIn
实际上不是可查询实例,它只会将其转换为linq-to-object可查询,在内存中执行,而不是在数据库中执行。对于你的情况,无论如何都没有必要将它作为可查询,至少我的答案是这样,除非它已经是一个可查询的等待在db中执行。
如果我的回答失败,请在AsQueryable
没有SharedIn
电话的情况下再试一次。