0

我正在使用一个看起来很讨厌但不可更改的数据库。

我们有一个名为“Locations”的表,其中包含“Position”列

此列的值如“A SHELF 5”

这意味着“案例A,货架5”。在理想情况下,我会有一个 Case 和 Shelf 列,其值分别为“A”和 5。

我想知道的是,是否有办法在我的实体类中定义一些“虚拟”(也许不是正确的词)列,这样一旦我这样做,我就可以像这些列存在一样查询表(选择、Where 子句、分组依据等)?

诚然,我对 Linq 还很陌生,所以我什至没有使用正确的技术术语来描述我想做的事情。这使得找到答案变得更加困难。因此,如果有人只是想向我指出任何可以帮助我入门的介绍性文档,我会认为这是一个有效的答案。

为了使它更复杂,该列的结构仅如上,取决于其他一些列的值,但我不会去那里。

感谢您抽时间阅读。过去的经验告诉我,SO 团队是最好的!

4

2 回答 2

0

在 Entity Framework 中将列拆分为多个其他列的任何操作都不会在查询中转换为 SQL。这意味着在检索到所有未被其他 where 子句元素过滤的行之后,对派生列的任何过滤都将在客户端上进行过滤。这可能没什么大不了的,但您需要牢记这一点。

执行计算列本身就是在部分代码文件中创建新属性的简单问题(如 James Curran 的回答所示)。即使在查询中,您的对象也应该很好地使用该属性。

不过,就您个人而言,我会考虑在数据库级别创建视图。可以设置 Locations 表的视图,将有问题的列分成另外两个列,而不会有太大的困难,并且从长远来看,额外的开销可以得到回报。您必须观看您的更新,但对于大多数目的,这将符合您的目的。

于 2010-09-24T20:42:23.693 回答
0

我习惯于 Ling-to-Sql 而不是 Linq-to-Entities,但这应该可以

partial class Location
{
     public string Case 
     {
         get
         {
             int pos = Position.IndexOf(' ');
             if (pos == -1)
                 throw new Exception();
             return Position.Substring(pos);
         }
     }

}
于 2010-09-24T19:06:40.420 回答