我必须在PatientChartImage表中检查PatientChartImage的存在。如果图像存在,我将其分配给现有对象。我在EF 4.0中使用以下代码
IEnumerable<PatientChartImage> pcimages = from pcImage in context.PatientChartImages
where pcImage.PatientImageID == id
select pcImage;
if (pcimages.Any())
{
pcimage = pcimages.First();
isNewImage = false;
}
else
{
isNewImage = true;
}
Sql Profiler显示2个调用
如何使此代码仅调用DB一次。
答案 0 :(得分:2)
改为使用FirstOrDefault()
:
返回a的第一个元素 序列,或者是默认值 序列不包含任何元素。
PatientChartImage pcimage = (from pcImage in context.PatientChartImages
where pcImage.PatientImageID == id
select pcImage).FirstOrDefault();
isNewImage = pcimage!=null;
我个人会在这种情况下使用lambda语法:
PatientChartImage pcimage = context.PatientChartImages
.Where( x => x.PatientImageID == id)
.FirstOrDefault();
答案 1 :(得分:2)
做这样的事情怎么样:
pcimage = pcimages.FirstOrDefault();
isNewImage = pcimage != null;
如果没有可用图像或查询序列中的第一个图像,则调用first或default将返回null。这应该只会导致单个数据库命中。
答案 2 :(得分:1)
var pcimage = (from pcImage in context.PatientChartImages
where pcImage.PatientImageID == id
select pcImage).FirstOrDefault();
isNewImage = pcimage != null;
答案 3 :(得分:0)
调用pcimages.FirstOrDefault()然后在进行处理之前检查它是否为null。
类似这样的事情
pcimage = pcimages.FirstOrDefault();
if (pcimage != null) {
isNewImage = false;
} else {
isNewImage = true;
}