【发布时间】:2017-08-16 14:19:09
【问题描述】:
使用 Linq 恢复不同类型集合的最佳方法是什么。 我有包含不同类型聊天消息的聊天表:
- 纯文本
- 图片
- 视频
表格的列是:
- 身份证
- senderId(发送聊天消息的人)
- 字符串(用于文本聊天消息)
- 图片/视频网址(用于图片或视频网址)
- 类型(1 用于文本,2 用于图像,3 用于视频)
- created_date(添加聊天的日期时间)
我正在从视图模型返回该信息:
var query = _context.Chats.Select(c => new ChatViewModel {
//
});
当用户发送视频消息时,我希望有更多信息可以带回来(视频第一帧图像的 url,以秒为单位的长度)。
我不知道如何以及在哪里存放这些额外的视频信息?当行是视频时,我可以专门添加 2 个 Nullable 额外列,但正如您所知,这是一个非常丑陋的选择。
或者我可以为这 2 列添加一个全新的表,但是当该行是视频类型时,我将如何有条件地加入该表? 我是否对该表进行左外连接(链式语法 Linq 中的交叉连接)?如果我还决定将图像额外信息移动到它自己的表中,那也会是其他左外连接吗?
this link 建议使用基类来产生如下效果:
IQueryable<BasePeople> basePeople;
if (teamType == "A")
basePeople = context.PeopleExtendedInfoA;
else
basePeople = context.PeopleExtendedInfoB;
然后加入该基类,但在该示例中 PeopleExtendedInfoA 和 PeopleExtendedInfoB 属于同一类型,而我的视频类型与其他两种类型(文本和图像)不同。
请注意:从服务器返回行时,必须考虑返回聊天的创建日期顺序。
你有什么建议?
【问题讨论】:
标签: c# linq-to-sql