首页 > 解决方案 > 查询表的Linq扩展方法

问题描述

我有一个如下所示的表(它是一个审计表,包含来自不同表的数据)和其他一些列:我正在尝试从审计表中获取所有值,其中表名列包含具有顶部且 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 的值的结果,但是当我尝试添加另一个条件以从通知中获取所有值时,我得到“枚举没有返回结果”。这是我的尝试

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

我的错误是什么?

标签: c#linqextension-methods

解决方案


你可能正在寻找这个:

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

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


推荐阅读