I have to check existance of PatientChartImage in PatientChartImage table.If Images exists i am assigning it to a existing object. I am using the following code in 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 shows 2 calls
- first is for pcimages.Any()
- second is for pcimages.First()
How can i make this code to call DB only Once.
Use FirstOrDefault()
instead:
Returns the first element of a sequence, or a default value if the sequence contains no elements.
PatientChartImage pcimage = (from pcImage in context.PatientChartImages
where pcImage.PatientImageID == id
select pcImage).FirstOrDefault();
isNewImage = pcimage!=null;
Personally I would use lambda syntax in this case:
PatientChartImage pcimage = context.PatientChartImages
.Where( x => x.PatientImageID == id)
.FirstOrDefault();
How about doing something like this:
pcimage = pcimages.FirstOrDefault();
isNewImage = pcimage != null;
Calling first or default will return null if there are no available images, or the first image in the query sequence. This should result in just a single DB hit.
var pcimage = (from pcImage in context.PatientChartImages
where pcImage.PatientImageID == id
select pcImage).FirstOrDefault();
isNewImage = pcimage != null;
call pcimages.FirstOrDefault() then check if this is null before doing you processing.
something like this
pcimage = pcimages.FirstOrDefault();
if (pcimage != null) {
isNewImage = false;
} else {
isNewImage = true;
}
精彩评论