2010-04-23 43 views

回答

1

是 - 你可以在T4模板執行任意有效的.NET代碼 - 模板被轉換成一個.NET類的,畢竟,然後把它編譯和執行。

你的問題是什麼?你試圖做什麼,你有多遠?路障在哪裏?

UPDATE:
我試過如下:

  • 我把LINQ到SQL模型到名爲AdventureWorksData
  • 我然後創建一個新的項目(控制檯應用程序)類庫
  • 我引用了AdventureWorksData組裝

有了這個S etup的地方,我可以寫一個T4模板是這樣的:

<#@ Template Language="C#v3.5" Debug="true" #> 
<#@ Output Extension=".cs" #> 
<#@ Assembly Name="System.Core.dll" #> 
<#@ Assembly Name="System.Data.dll" #> 
<#@ Assembly Name="System.Data.Linq.dll" #> 
<#@ Assembly Name="AdventureWorksData.dll" #> 
<#@ Import Namespace="System" #> 
<#@ Import Namespace="System.Data" #> 
<#@ Import Namespace="System.Data.Linq" #> 
<#@ Import Namespace="System.Linq" #> 
<#@ Import Namespace="AdventureWorksData" #> 
using System; 
using AdventureWorksData; 

namespace AdventureWorks.Products 
{ 
    public class ProductList 
    { 
<# 
     AdventureWorksDataContext ctx = new AdventureWorksDataContext(); 

     var result = from p in ctx.Products 
        where p.ProductCategoryID == 5 
        select p; 

     foreach (Product product in result) 
     { 
#> 
      public string <#= SanitizeName(product.Name) #> = "<#= product.ProductNumber #>/ID= <#= product.ProductID #>"; 
<# 
     } 
#> 
    } 
} 
<#+ 
     internal string SanitizeName(string input) 
     { 
      return input.Replace(" ", "_").Replace("-", "_").Replace("/", "_").Replace(".", "_").Replace(",", "_"); 
     } 
#> 

我在這裏做的是枚舉的AdventureWorksLT示例數據庫中的Products,我抓住所有產品ProductCategoryID == 5,使用LINQ。

然後我創建一個類,它包含字符串,其中字符串變量的名稱與產品本身的(清除)名稱相對應,字符串值包含數據庫中該產品的某些信息位。如您所見,您可以很容易地將Linq-to-SQL模型和LINQ查詢合併到您的T4模板中。

+0

感謝您的回覆。例如,我正在嘗試做下面的事情。我想知道如何在T4模板中設置數據庫連接(例如,使用NorthWind數據庫)。 var result = from p in db.Products 其中p.CategoryID == 5 select p; \t \t \t \t \t \t \t 的foreach WriteComment(item.ProductName)(在結果VAR項目){; – NewT4 2010-04-23 21:31:04

+1

感謝您的示例代碼。 – NewT4 2010-04-29 16:21:30