2012-03-15 73 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