You may see the following error when executing a LINQ to Entities query:
System.NotSupportedException Unable to create a constant value of type 'System.Object'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.
var first = Context.Foos.First(); var again = Context.Foos.Where(f => f ==
first).Single();
var again = Context.Foos.Where(f => f.Id == first.Id).Single();
var wrong = Context.Foos.Where(f => f.SomeBoolean.Equals(true)).Single(); // runtime error var right = Context.Foos.Where(f => f.SomeBoolean
).Single(); // works
var wrong = Context.Foos .Where(f => f.SomeComplexType == null) .Single(); // runtime error var right = Context.Foos .Where(f => f.SomeComplexType.SomeString == null
) .Single(); // works var works = Context.Foos .Where(f => f.SomeEntity == null) .Single(); // works
var works = Context.Foos .Where(f => f.SomeEntity == null
) .Single(); // works
In a LINQ to Entities query, you can use either FirstOrDefault() or SingleOrDefault as the final query operation:
FirstOrDefault()
SingleOrDefault
var right = Context.Foos .Where(f => f.SomeBoolean
) .FirstOrDefault(); // works var works = Context.Foos .Where(f => f.SomeBoolean) .SingleOrDefault(); // works
var works = Context.Foos
.Where(f => f.SomeBoolean
)
.SingleOrDefault(); // works
var wrong = Context.Foos .Where(f => f.SomeBoolean
) .Select(f => f.Bars.SingleOrDefault()) .SingleOrDefault(); // Runtime error var right = Context.Foos .Where(f => f.SomeBoolean) .Select(f => f.Bars.FirstOrDefault()) .SingleOrDefault(); // works
var right = Context.Foos
.Select(f => f.Bars.FirstOrDefault()) .SingleOrDefault(); // works
FirstOrDefault
Ed Price - MSFT edited Revision 12. Comment: Space formatting