【发布时间】:2011-03-31 02:53:50
【问题描述】:
在 .net 3.5 中,如果我生成一个 linq to sql 数据上下文,它可以使名称复数化。在我的代码中,我需要复数一些术语。我可以使用 Linq 使用的任何方法来生成我的复数吗?
【问题讨论】:
-
不知道 3.5,但如果我的目标是 4,我会查看 EF4 的 PluralizationService
-
无赖。我暂时卡在 3.5 上
在 .net 3.5 中,如果我生成一个 linq to sql 数据上下文,它可以使名称复数化。在我的代码中,我需要复数一些术语。我可以使用 Linq 使用的任何方法来生成我的复数吗?
【问题讨论】:
您必须使用反射器来深入了解为 linq-to-sql 设计器执行代码生成的 Visual Studio 程序集。
【讨论】:
LINQ to SQL 不公开其复数逻辑。对 Reflector 的快速检查表明,它并没有使用非常复杂的算法:
如果它以“x”、“ch”、“sh”或“ss”结尾,则添加“es”。
如果它以辅音前面的“y”结尾,请删除 y 并添加“ies”。
否则,添加's'。
如果 .NET 4 是一个选项,那么 EF 的 PluralizationService 会更加彻底。以防万一您需要复数“pneumonoultramicroscopicsilicovolcanoconiosis”。
【讨论】:
还有一个 .NET 端口的 Inflector 可以做同样的工作。作者的博客现已关闭,但可以在 http://cid-net.googlecode.com/svn/trunk/src/Cid.Mvc/Inflector.cs 等处获得。
【讨论】:
LINQ to SQL 使用一个相当简单的系统来实现复数。如果您要使用复杂的术语,我建议您使用the Inflector that is part of SEDE。那段代码似乎来自SubSonic project。
【讨论】: