Linq查询返回不同类型的集合conditioanly

时间:2017-08-16 14:19:10

标签: c# linq-to-sql

使用Linq恢复不同类型集合的最佳方法是什么? 我有聊天表,其中包含不同类型的聊天消息:

  • 纯文字
  • 图像
  • 视频

表的列是:

  • 编号
  • senderId(发送聊天消息的人)
  • string(用于文字聊天消息)
  • 图片/视频网址(用于图片或视频网址)
  • 类型(文字为1,图片为2,视频为3)
  • created_date(添加聊天的日期时间)

我从视图模型中返回该信息:

 <md-row *cdkRowDef="let row; columns: displayedColumns;"
          class="mat-elevation-z4 card">

当用户发送视频消息时,我希望有更多信息可以带回来(视频的第1帧图像的网址,以秒为单位的长度)。

我不知道如何以及在哪里存放这些额外的视频信息?我可以专门添加2个Nullable额外列,当行是视频时,但是你知道这是一个非常难看的选择。

或者我可以为这两列添加一个全新的表,但是当该行是视频类型时,我将如何有条件地加入此表? 我是否对此表执行左外连接(链式语法Linq中的交叉连接)?如果我还决定将图像额外信息移动到它自己的表中,那么它也会是其他左外连接吗?

this link建议使用基类来产生如下效果:

var query = _context.Chats.Select(c => new ChatViewModel {
  // 
});

然后加入到该基类,但在该示例中,PeopleExtendedInfoA和PeopleExtendedInfoB属于同一类型,而我的视频类型与其他2种类型(文本和图像)不同。

请注意:从服务器返回行时,必须考虑所返回聊天记录的创建日期顺序。

你有什么建议?

1 个答案:

答案 0 :(得分:2)

我的第一反应是将URL和持续时间作为子表返回。如果消息不是视频消息,则子表中将没有行。