Точно так же.
Вы можете убедиться в этом сами, посмотрев на ToString ()
string query1String, query2String;
using (var context = new TRANSITEntities())
{
var result = context.Table1.Where(c => c.UserCode == "123");
query1String = result.Expression.ToString();
}
using (var context = new TRANSITEntities())
{
var result = from c in context.Table1
where c.UserCode == "123"
select c;
var query2String = result.Expression.ToString();
}
Assert.AreEqual(query1String, query2String);
Следует также отметить, что result
на самом деле НЕ результат.Это невыполненный / перечислимый IQueryable
.Это означает, что это похоже на оператор SQL, который еще не выполнялся (вроде).Если бы вы сделали
var t1 = result.ToArray()
var t2 = result.ToArray()
, тогда запрос фактически будет выполнен дважды.t1
и t2
- РЕАЛЬНЫЕ результаты (массив в памяти) ... не result
.Другими словами, result
должно действительно называться query
И, кроме того, приведенный выше пример никогда не сработает ... потому что если вы вызовете ToArray
для результата вне блока using
, он потерпит неудачу...потому что вы не можете выполнить запрос после удаления контекста:
using (var context = new TRANSITEntities())
{
var result = context.Table1.Where(c => c.UserCode == "123");
}
// throws exception:
var array = result.ToArray();