【问题标题】:Can I use linq's method of pluralizing a term?我可以使用 linq 的复数方法吗?
【发布时间】:2011-03-31 02:53:50
【问题描述】:

在 .net 3.5 中,如果我生成一个 linq to sql 数据上下文,它可以使名称复数化。在我的代码中,我需要复数一些术语。我可以使用 Linq 使用的任何方法来生成我的复数吗?

【问题讨论】:

  • 不知道 3.5,但如果我的目标是 4,我会查看 EF4 的 PluralizationService
  • 无赖。我暂时卡在 3.5 上

标签: c# linq pluralize


【解决方案1】:

您必须使用反射器来深入了解为 linq-to-sql 设计器执行代码生成的 Visual Studio 程序集。

【讨论】:

  • 我想我会得到一个免费赠品,因为你是一个版主,它在评论中 =)
【解决方案2】:

LINQ to SQL 不公开其复数逻辑。对 Reflector 的快速检查表明,它并没有使用非常复杂的算法:

如果它以“x”、“ch”、“sh”或“ss”结尾,则添加“es”。
如果它以辅音前面的“y”结尾,请删除 y 并添加“ies”。
否则,添加's'。

如果 .NET 4 是一个选项,那么 EF 的 PluralizationService 会更加彻底。以防万一您需要复数“pneumonoultramicroscopicsilicovolcanoconiosis”。

【讨论】:

    【解决方案3】:

    还有一个 .NET 端口的 Inflector 可以做同样的工作。作者的博客现已关闭,但可以在 http://cid-net.googlecode.com/svn/trunk/src/Cid.Mvc/Inflector.cs 等处获得。

    (通过Alternatives to Inflector.Net

    【讨论】:

      【解决方案4】:

      LINQ to SQL 使用一个相当简单的系统来实现复数。如果您要使用复杂的术语,我建议您使用the Inflector that is part of SEDE。那段代码似乎来自SubSonic project

      【讨论】:

      • Inflector 不是 subsonic 的一部分,这似乎是一个严重错误的归因。它是由 Andrew Peters 作为 ruby​​ 变形器的一个端口编写的。他的网站不再可用,但他的代码仍然可以访问:cid-net.googlecode.com/svn/trunk/src/Cid.Mvc/Inflector.cs,并且正确地包含了他的版权声明。
      • 其实我想说的是 subsonic 中的版本是 Rails 版本的独立移植,因为移植后如何命名它们会做出不同的决定。
      • @stevemegson 是的,名称不同。但是,似乎 subsonic 采用了 Andrew 的版本,重命名了所有方法,并添加了简短的 XML 文档。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      相关资源
      最近更新 更多