将匿名类型返回到ObjectQuery的Cast查询

时间:2012-03-15 16:57:10

标签: c# linq-to-sql

这是linq to sql,而不是实体框架

我正在尝试在返回匿名类型的查询上调用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();

2 个答案:

答案 0 :(得分:3)

对于LINQ to SQL,您可以使用DataContext.Log propertyDataContext.GetCommand method来获取生成的SQL:

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

此示例从AdventureWorks数据库返回以下SQL:

  

SELECT TOP(1)   [T 0]。[BusinessEntityID]   [t0]。[PersonType],[t0]。[NameStyle],   [t0]。[标题],[t0]。[FirstName],   [t0]。[MiddleName],[t0]。[LastName],   [t0]。[后缀],[t0]。[EmailPromotion],   [T 0]。[AdditionalContactInfo]   [t0]。[人口统计],[t0]。[rowguid] AS   [Rowguid],[t0]。[ModifiedDate] FROM   [人]。[人] AS [t0]

答案 1 :(得分:2)

ObjectQuery是实体框架类型。

您不能将它与LINQ to SQL一起使用。