Linq IN语句从列表中排除
本文关键字:排除 列表 IN 语句 Linq | 更新日期: 2023-09-27 18:01:52
我有两个表
Id | StartDate | EndDate
ExcludedContracts
Id | ContractId
我使用以下语句来获取两组数据:
var excludedContracts = from Excluded in
DataContext.ExcludedTransportContracts
select Excluded;
// Get a collection of all live sites first
var liveContracts = from Contracts in DataContext.Contracts
where Contracts.EndDate > DateTime.Now
select Contracts;
我需要选择在ExcludedContracts表中没有记录的所有合同。我一直在与WHERE查询斗争一段时间,但没有运气。
我如何做一个查询类似于我将在(1,2,3)SQL的安装?
谢谢!
我不知道你在使用哪个查询提供程序,但如果查询提供程序支持Contains方法,你可以使用这个:
//get all contracts that haven't been excluded
var nonExcludedContacts = liveContracts.Where(l => !excludedContracts.Contains(l));
如果不支持该方法,则可以使用Any方法。它不是很好读,但它完成了工作:
//get all contracts that haven't been excluded
var nonExcludedContacts = liveContracts.Where(l => !excludedContracts.Any(e => e.ContractId == l.Id));
这两个表在数据级别上不相关吗?是否有一个合同对象的列表ExcludedTransportContracts作为属性?
从数据来看,这可能是它们应该如何相关的,然后你可以做var liveContract = DataContext.Contracts.Where(c => c.ExcludedTransportContracts.Count() == 0 && c.EndDate > DateTime.Now )
是我的头,所以代码可能需要稍微修改。
in在LINQ中的等效包含http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx但是你也应该看看LINQ除了方法http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx
Update:如上所述,这些是IEnumerable的,所以应该是http://msdn.microsoft.com/en-us/library/bb341422.aspx for contains, http://msdn.microsoft.com/en-us/library/bb348938.aspx for except for Queryable
试试这样做。显然,如果使用"Contains"方法,应该比较相似的数据类型/对象。
在包含函数中使用隐式类型变量时,编译器可能不会编译代码,但我不确定。
List<Contracts> excludedContracts =
(from Excluded in DataContext.ExcludedTransportContracts
select Excluded).toList();
List<Contracts> liveContracts =
(from Contracts in DataContext.Contracts
where Contracts.EndDate > DateTime.Now &&
!excludedContracts.Contains(Contracts)
select Contracts).toList();
此任务可以使用Enumerable.Contains()
函数