使用Linq确定列表中是否存在记录但是表中是否存在记录

Cor*_*rey 3 c# linq entity-framework

我无法确定数据库表中是否存在记录,但列表中包含的更新记录中是否存在记录.如果记录在更新列表中不存在但在数据库表中存在,那么该记录需要删除.

我可以查询表以确定它是否已被修改,如果数据库表中不存在该记录然后更新它,但确定相反的情况证明有点棘手.另一个限制是我需要结果是一个bool值为exists = true而不是exists = false,这样我就可以适当地处理删除记录了.

我这样做是为了确定数据库表中是否存在记录:

bool exists = db.table.Any(t => t.EntityID != list.EntityID)
Run Code Online (Sandbox Code Playgroud)

但似乎无法反过来管理.

列表和数据库表使用Entity Framework进行1对1映射.

如果记录存在于数据库中但不在列表中,则删除.

Cor*_*rey 10

看起来你已经扭转了那里的逻辑.如果要检查是否存在特定记录,其中存储了ID list.EntityID,它看起来像这样:

bool exists = db.table.Any(t => t.EntityID == list.EntityID);
Run Code Online (Sandbox Code Playgroud)

如果您有实体列表,并且要查找数据库中存在的列表中不存在的任何记录,则可以执行以下操作:

var extraitems = db.table.Where(t => !list.Select(l => l.EntityID).Contains(t.EntityID));
Run Code Online (Sandbox Code Playgroud)

这将为您提供可以传递给的实体列表DeleteAllOnSubmit().

  • @AnilPurswani取决于.如果列表很小并且表大`var extraitems = list.Where(l =>!db.table.Select(t => t.EntityID).Contains(t.EntityID));`应该这样做.如果列表很大且表很小,那么首先从表中下拉ID可能会更快. (2认同)