【发布时间】:2018-03-30 16:29:26
【问题描述】:
我有表 Sites 和相关表 Photos,Photos 在 SiteId 上获得了 FK。
照片的字段值可以是 PhotoNumber 等于 1、2 或 3。
我需要知道Site 是否有Photos 和PhotoNumber = 1、2 和3。
我尝试了类似的方法,但我不知道如何通过Date(Date 是 linq 内部的Photos 中的索引字段)订购照片,以便在有序列表中使用Any(),并订购一次,以优化这一点.我很困惑是否应该订购它?
var sites = (from site in context.Sites
select new
{
Site = site,
Cam1 = context.Photos.Any(p => p.SiteId == site.SiteID && p.PhotoNumber == 1),
Cam2 = context.Photos.Any(p => p.SiteId == site.SiteID && p.PhotoNumber == 2),
Cam3 = context.Photos.Any(p => p.SiteId == site.SiteID && p.PhotoNumber == 3)
}).ToList();
我知道最简单的方法可能是这样的:
var sitesToCameraIds = (from photo in context.Photos
select new { SiteId = photo.SiteId, CameraId = photo.PhotoNumber})
.Distinct()
.ToList().OrderBy(p => p.SiteId);
但这会非常慢,因为它需要检查所有照片以区分未索引字段PhotoNumber(不能作为索引,因为它只能是1-3),而不是我想使用Any()只要它在第一次匹配时停止搜索。
照片桌:
站点表:
【问题讨论】:
-
您的问题令人困惑。您想知道一个站点是否为 1,2 和 3 的照片?听起来你是这样做的,然后你的问题是关于在没有代码示例的日期进行排序,也没有任何理由知道我可以告诉的日期。
-
@Erik Philips 我添加了表格图片。例如,我想知道 SiteId = 10 的站点是否只有 PhotoNumber = 1 的照片,或者它有任何 PhotoNumber = 1 和 PhotoNumber = 2 的照片
-
日期与任何事情有什么关系?
-
其他部分使用的日期,我认为按日期排序会提高 Any() 性能。可能我错了。
-
听起来像是 XY 问题。
Any将使用应该被索引的SiteIDFK 列。问题是3个Any会生成3个EXISTS子查询。
标签: c# sql-server entity-framework linq entity-framework-6