c# - 如何使用单个查询来检查两个表中是否存在一个值
问题描述
使用 EF Core 2.2.2,我有这两个简单的查询,目的是确定 aColor
是否在CollectionItem
orPuzzleColor
表中使用:
var isACollectionItem = _applicationDbContext.CollectionItem.Any(collectionItem => collectionItem.ColorId == color.Id);
var isAPuzzleItem = _applicationDbContext.PuzzleColor.Any(puzzleColor => puzzleColor.ColorId == color.Id);
var eitherOr =
_applicationDbContext.CollectionItem.Any(collectionItem => collectionItem.ColorId == color.Id)
|| _applicationDbContext.PuzzleColor.Any(puzzleColor => puzzleColor.ColorId == color.Id);
前两行生成两个单独的查询,如下所示:
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM [CollectionItem] AS [collectionItem]
WHERE [collectionItem].[ColorId] = @__color_Id_0)
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END
将它们与运算符放在一起||
意味着它将在第一个不正确的情况下运行,否则它将只运行第一个查询。
是否可以使用 EF 将两个检查合并到一个查询中?
解决方案
Color
我能够通过使用该表(我的原始帖子中没有包含该表,我的错误)作为起点来获得一个查询:
bool singleQuery = _applicationDbContext.Color
.Any(myColor =>
myColor.Id == _applicationDbContext.CollectionItem.FirstOrDefault(collectionItem => collectionItem.ColorId == color.Id).ColorId
|| myColor.Id == _applicationDbContext.PuzzleColor.FirstOrDefault(puzzleColor => puzzleColor.ColorId == color.Id).ColorId);
被翻译成:
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM [Color] AS [myColor]
WHERE ([myColor].[Id] = (
SELECT TOP(1) [collectionItem].[ColorId]
FROM [CollectionItem] AS [collectionItem]
WHERE [collectionItem].[ColorId] = @__color_Id_0
)) OR ([myColor].[Id] = (
SELECT TOP(1) [puzzleColor].[ColorId]
FROM [ServedColor] AS [puzzleColor]
WHERE ([puzzleColor].[Discriminator] = N'PuzzleColor') AND ([puzzleColor].[ColorId] = @__color_Id_1)
)))
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END
我想可以通过使用联接或联合来创建性能更高的查询
推荐阅读
- entity-framework - InMemory 数据库 (EF) 的 Liquibase 变更集
- webpack - 在 webpack 构建后 Highlight.js 语法突出显示不起作用
- python - 在同一类 OpenCV Python 中的两个不同函数中使用 VideoCapture()
- android - Flutter SDK 没有平滑渐变?
- vba - Vba 电子邮件生成器,来自 excel 电子表格的主题
- android - ionic cordova run android正在给出gradle错误
- laravel - Laravel 克隆/多集合到模型插入
- regex - 正则表达式在手机号码的第三列中没有空格
- javascript - 如何将扫描的 QR 码值发布到服务器上的数据库
- c++ - 链接时突然收到 maxrregcount 警告和未定义的引用错误