无论如何,我可以像在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);

这是一个复杂的实体,在该实体中,您将根据另一表的某些属性排除某些属性,并希望不排除的实体的名称。如果您想要整个实体,那么您需要构建异常作为实体类的实例,以便它们满足默认的平等操作员(请参阅文档)。

来自: stackoverflow.com