如何在T4中使用linq扩展方法

时间:2014-03-05 17:47:26

标签: c#-4.0 .net-4.0

我一直在堆栈溢出和谷歌搜索一段时间试图找到如何在T4文件中使用Linq扩展方法的答案。我正在使用VS 2012,.NET 4.5。

例如:

Dictionary<string, string> myDict = new Dictionary<string, string>();
myDict = GetSomeData();

让我们说我想得到字典中的最后一项:

<#string last = colNames.Keys.Last();#>

它不介意我使用集合,但它不喜欢“.Last()”。

  
    

编译转换:'System.Collections.Generic.Dictionary.KeyCollection'不包含'Last'的定义,也没有扩展方法'Last'接受类型'System.Collections.Generic.Dictionary.KeyCollection'的第一个参数可以找到(你错过了使用指令或程序集引用吗?)

  

我已导入必要的命名空间......

编辑 - &gt;为清楚起见......我在T4模板的顶部有以下内容:

<#@ assembly name="$(SolutionDir)\SomeProject\bin\Debug\System.Data.Linq.Dll" #>
<#@ import namespace="System.Data.Linq" #>

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:5)

确保您的T4模板包含引用System.Core.dll的正确Assembly Directive,这是定义LINQ的地方:

<#@ assembly name="System.Core"#>

这相当于常规C#项目中的“Add Reference ...”

然后确保System.Linq命名空间有适当的Import Directive

<#@ import namespace="System.Linq"#>

这相当于常规C#代码中的using指令。

.tt文件的顶部添加这些内容。