如何获取此类查询的跟踪字符串:
var product = _context.Products.Where( p => p.Category == "Windows" )
.SingleOrDefault();
// I can't do this since product is not an ObjectQuery instance
// product.ToTraceString();
答案 0 :(得分:7)
针对不同问题的不同答案。
您无法就此致电ToTraceString()
:
var product = _context.Products.Where( p => p.Category == "Windows" )
.SingleOrDefault();
你可以这样做:
var q = _context.Products.Where( p => p.Category == "Windows" )
var ts = ((ObjectQuery)q).ToTraceString();
var product = q.SingleOrDefault();
......但它不是100%准确。 MSSQL EF提供程序将使用TOP 2
Single
,这将遗漏。
你可以接近这个:
var q = _context.Products.Where( p => p.Category == "Windows" )
var ts = ((ObjectQuery)q.Take(2)).ToTraceString();
var product = q.SingleOrDefault();
...它应该为您提供正确的SQL,但需要了解实现。
原始问题歪曲了问题。我原来的答案是:
var ts = (product as ObjectQuery).ToTraceString();
答案 1 :(得分:5)
这是你需要做的:
string trace = ((ObjectQuery)_context.Products
.Where(p => p.Category == "Windows")).ToTraceString();
编译器不接受从Product EntityObject到ObjectQuery的转换,但是IQueryable< Product>可以转换为ObjectQuery,所以基本上你只需要在尝试查看跟踪字符串之前摆脱.SingleOrDefault()
方法。