我正在使用EntityFramework 5 EDMX设计师,并希望将第一个和第一个结合起来。实体的单个字段值(例如,名称)中的人的姓氏。
我认为在以前的版本中有一种方法可以做到这一点,但我没有看到任何可用的东西来做我需要做的事情。
这还有可能吗?
答案 0 :(得分:0)
不,不可能。您可以create model defined function在查询中使用它,但它仍然不是您实体的一部分。如果您的实体是只读的,您可以使用组合列创建数据库视图并映射它而不是表 - 它还显示了将列组合成单个属性的主要原因并非如此简单。在读取过程中自动连接很容易,但是自动分解以将正确的值保存到正确的列中是困难且容易出错的。
如果除了查询之外还需要组合属性,则只需创建实体类的另一部分部分并添加自己的计算属性即可。如果需要组合属性进行查询,请使用模型定义函数。
答案 1 :(得分:0)
我这样做的方法是通过Computed Column
,如下所述:
How to make a computed column nullable in SQL Server
如果使用计算列,则可以在LINQ查询中使用此类列。例如:
var users = Database.Users.Where(u => u.FullName.ToLower().Contains("string"));
您不会收到“不支持LINQ to Entities ”之类的错误,因为此属性实际上是模型对象的一部分。所有繁重的工作都发生在数据库方面。
当然,您可以在部分类中放置FullName
属性并使用它。
public string FullName
{
get { return string.Format("{0} {1}", FirstName, LastName); }
}
在这种情况下,您必须先调用.ToList()
(Database.Users.ToList();
)才能在LINQ查询中使用此属性。 .ToList()
会将你Users
的所有FullName
保湿。这是不可取的!
您还可以尝试此处描述的{{1}}属性实现:Calculated Columns in Entity Framework Code First Migrations
答案 2 :(得分:0)
除非我不理解你的问题,否则我相信我已经完成了一个类似于以下内容的部分课程:
for lyst in labels:
# lyst is each list in labels
for char in lyst:
# char is the character in that list
label = Label(... text=char) # everything else in the Label() looks good.
label.grid(...) # You could use counters for this or use ennumerate()-ask if you need.
# The continue here was entirely irrelevant.