【问题标题】:What are the good practices/patterns with Entity Framework to return a list of entity that contains computed value使用实体框架返回包含计算值的实体列表的良好实践/模式是什么
【发布时间】:2013-04-10 21:48:36
【问题描述】:

我想知道使用实体框架返回包含计算值的实体列表的良好做法/模式是什么?

详细来说,在我的 DAL 中,我有一个返回实体列表的函数:

Return (From msg In context.Messages
         Where (msg.UserCreation.Equals(From, StringComparison.OrdinalIgnoreCase))).ToList()

这工作正常,这会返回一个列表(消息)。 Message 是一个实体,对应于 Sql Server 中的一个表。现在我必须修改这个查询,以便我可以包含每个“消息”的计数。我想知道每封邮件的收件人数量。

Return (From msg In context.Messages
         Let countRecipient as integer = context.MessageRecipientJeu.Count(Function(x) x.Message.UserCreation.Equals(From, StringComparison.OrdinalIgnoreCase))
         Where (msg.UserCreation.Equals(From, StringComparison.OrdinalIgnoreCase))).ToList()

这会返回一个匿名类型,所以我得到一个错误。

我有什么最好的解决方案?

我是否必须在我的实体模型中(在 edmx 文件中)定义用户自定义类型? 我是否应该定义自己的包含计数且仅用于此功能的实体消息? 还有什么?

希望它足够清楚。感谢您的帮助。

【问题讨论】:

    标签: vb.net linq entity-framework-4


    【解决方案1】:

    我推荐 MSDN 101 LINQ 示例页面:http://msdn.microsoft.com/en-us/bb688088.aspx 它不是完美的结构(按操作名称而不是您打算执行的目的来构建),但是由于示例太多,因此只需单击一些就可以为您提供一些很好的示例。

    例如这是 Where 的页面:http://msdn.microsoft.com/en-us/bb737944

    这里有一些 IF :http://msdn.microsoft.com/en-us/bb737907

    更新

    遵循默认结构(几乎在每个示例中都使用它):

    1. 定义查询(将 LINQ 分配给该变量,不要定义类型或使用 As System.Collections.IEnumerable
    2. 使用 For-Each 循环来处理每个结果。您可以在此处转换和填充所需的变量类型。

    使用 For Each 很常见,因此我认为这是最佳实践。

    我还希望找到可以自动为计数添加整数的东西(我假设在 linq 中有类似的东西)。这将是最好的解决方案,但现在无法在示例中找到它。

    【讨论】:

    • 这并不能真正回答我的问题。我想知道返回与我的数据库中定义的实体不同的实体的良好做法。我的实体模型是从数据库中自动生成的。
    • 你是对的,这不是直接的答案。更新后,应该再了解什么可以提供帮助以及一种可以搜索解决方案的方法,直到有人在这里提供更好的解决方案。我想这仍然比没有解决方案要好?
    • 这就是我的结尾。我使用 For Each 并将我的匿名类型转换为我在生成的实体模型旁边创建的类型。感谢您的帮助
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多