Linq 扩展方法查询 table

Linq extension method to query a table

我有一个 table,如下所示(它是一个审计 table,包含来自不同 table 的数据)和其他一些列: 我正在尝试从审计 table 中获取所有值,其中 table 名称列包含 table,其顶部和 EntiryId 为 1007,通知列

Table Name      EntityId
    AllTOP      1007
ProductTOP      1007
ProductTOP      1008
ProductTOP      1007
UserRoleTOP     1007
UserRoleTOP     1008
UserRoleTOP     1007
RequestTypeTOP  1007
Notifications   1014
Notifications   1015
Notifications   1016

我试过以下:

var logList = _dbcontext.Audits.Where(e => e.TableName.Contains("TOP") && e.EntityId == 1007.ToString()).ToList()

此查询为我提供了包含 top 值的结果,但是当我尝试添加另一个条件以从 Notification 获取所有值时,我得到 "Enumeration returns no result"。这是我的尝试

var logList = _dbcontext.Audits.Where(e => e.TableName.Contains("TOP") && e.EntityId == 1007.ToString() && e.TableName.Contains("Notifications")).ToList()

我的错误是什么?

您可能正在寻找这个:

var logList = _dbcontext.Audits
  .Where(e => (e.TableName.Contains("TOP") || e.TableName.Contains("Notifications")) 
  && e.EntityId == 1007.ToString()).ToList()

列名应使用逻辑或 (||) 而不是与 (&&)。这是假设 EnitityId 条件应该存在,无论它是 Top 还是 Notifications

AND 操作数 && 以这种方式起作用,即对于 select 该行的一行,所有条件都必须为真。使用您提供的数据,您需要此查询:

var logList = _dbcontext.Audits.Where(e => (e.TableName.Contains("TOP") || e.TableName.Contains("Notifications"))
&& e.EntityId == "1007" ).ToList()