无论如何,我可以像在SQL Server中一样创建一个不在子句中linq到实体?
答案
如果您使用内存集合作为过滤器,则最好使用contains()的否定。请注意,如果列表太长,则可能会失败,在这种情况下,您需要选择其他策略(请参见下文,以获取完全面向DB的查询的策略)。
var exceptionList = new List<string> { "exception1", "exception2" };
var query = myEntities.MyEntity
.Select(e => e.Name)
.Where(e => !exceptionList.Contains(e.Name));
如果您是根据另一个数据库查询的排除Except
可能是一个更好的选择。(这里有一个关联到LINQ中受支持的设置扩展到实体)
var exceptionList = myEntities.MyOtherEntity
.Select(e => e.Name);
var query = myEntities.MyEntity
.Select(e => e.Name)
.Except(exceptionList);
这是一个复杂的实体,在该实体中,您将根据另一表的某些属性排除某些属性,并希望不排除的实体的名称。如果您想要整个实体,那么您需要构建异常作为实体类的实例,以便它们满足默认的平等操作员(请参阅文档)。