1

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

详细地说,在我的 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 文件中)定义用户自定义类型?我是否应该定义自己的包含计数且仅用于此功能的实体消息?还要别的吗?

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

4

1 回答 1

0

我推荐 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 中有类似的东西)。这将是最好的解决方案,但现在无法在示例中找到它。

于 2013-04-09T21:15:28.503 回答