2012-03-15 74 views
2

这是LINQ to SQL的,没有实体框架铸造查询返回匿名类型的ObjectQuery

我想打电话给ToStraceString在返回匿名类型的查询,但我投来的ObjectQuery失败。

是否有其他方法可以将此查询转换为ObjectQuery,或者是否有其他方法来获取生成的T-SQL启动SQL Server跟踪?

 var junk = db.SiteProducts 
        .Where(p => p.SiteProductId == SiteProductId) 
        .Select(p => new 
     { 
      p.SiteProductId, 
      ItemSku = p.ItemMaster != null ? p.ItemMaster.ItemSku : "", 
      p.AdminDisplayName, 
      p.CurrentInventory, 
      p.IsFreeGift, 
      p.SiteDivisionId, 
      p.PrimaryParentSiteCategoryId, 
      p.UsesVariantAttributes, 
      UsesOmsPz = p.ItemMaster != null ? p.ItemMaster.OmsPzTemplateId.HasValue : false, 
      p.HasDetailPage, 

      div = p.SiteDivision.AdminDisplayName, 
      domain = p.Site.PrimaryDomain 
     }); 


     string str = ((System.Data.Objects.ObjectQuery)junk).ToTraceString(); 
+1

'ObjectQuery'是一个EF类型。 – SLaks 2012-03-15 16:58:13

+0

@SLaks - 多么尴尬。右 - l2s使用日志属性 - 这解释了我的麻烦搜索... *叹息* – 2012-03-15 16:59:44

+0

@SLaks - 我会保持开放的情况下,你已经写了一个答案 – 2012-03-15 17:00:21

回答

2

对于LINQ to SQL中,你可以使用DataContext.Log property,或DataContext.GetCommand method来获取生成的SQL:

var query = dc.Persons.Take(1); 
string generatedSql = dc.GetCommand(query).CommandText; 

此示例从AdventureWorks数据库返回的SQL语句:

SELECT TOP( 1) [t0]。[BusinessEntityID], [t0]。[PersonType],[t0]。[NameStyle], [t0]。[Title],[t0]。[FirstName], [t0]。 [MiddleName],[t0]。[LastName],[t0]。[后缀],[t0]。[EmailPromotion], [t0]。[AdditionalContactInfo], [t0]。[Demographics],[t0]。[rowguid] AS [Rowguid],[t0 [ModifiedDate] FROM [Person]。[Person] AS [t0]

+0

谢谢你的回答:-) – 2012-03-15 17:54:43

2

ObjectQuery是一个实体框架类型。

你不能在LINQ to SQL中使用它。

+0

你能不能在l2s上下文中提到log属性,这对于任何后来看到这个的人都有用 – 2012-03-15 17:07:10