C# Linq查询以有条件地返回不同类型的集合
使用Linq恢复不同类型集合的最佳方法是什么。 我有一张聊天桌,里面有不同类型的聊天信息:C# Linq查询以有条件地返回不同类型的集合,c#,linq-to-sql,C#,Linq To Sql,使用Linq恢复不同类型集合的最佳方法是什么。 我有一张聊天桌,里面有不同类型的聊天信息: 纯文本 形象 录像带 表中的列为: 身份证 senderId(发送聊天信息的人) 字符串(用于文本聊天信息) 图像/视频url(用于图像或视频url) 类型(1表示文本,2表示图像,3表示视频) 创建日期(添加聊天的日期时间) 我正在从视图模型返回该信息: var query = _context.Chats.Select(c => new ChatViewModel { // });
- 纯文本
- 形象
- 录像带
- 身份证
- senderId(发送聊天信息的人)
- 字符串(用于文本聊天信息)
- 图像/视频url(用于图像或视频url)
- 类型(1表示文本,2表示图像,3表示视频)
- 创建日期(添加聊天的日期时间)
var query = _context.Chats.Select(c => new ChatViewModel {
//
});
当用户发送视频消息时,我想获得更多的信息,比如(视频第一帧图像的url,以秒为单位的长度)
我不知道如何以及在哪里存放这些额外的视频信息?我可以添加2个可为空的额外列,特别是当行是视频时,但正如您所知,这是一个非常丑陋的选择
或者,我可以为这两列添加一个全新的表,但是当行是视频类型时,我如何有条件地连接到此表?
我是否对此表进行左外部联接(链式语法Linq中的交叉联接)?如果我也决定将图像的额外信息移动到它自己的表中,那会是另一个左外部连接吗
建议使用基类产生如下效果:
IQueryable<BasePeople> basePeople;
if (teamType == "A")
basePeople = context.PeopleExtendedInfoA;
else
basePeople = context.PeopleExtendedInfoB;
IQueryable-basePeople;
如果(团队类型=“A”)
basePeople=context.PeopleExtendedInfoA;
其他的
basePeople=context.PeopleExtendedInfoB;
然后加入该基类,但在该示例中,PeopleExtendedInfoA和PeopleExtendedInfoB属于同一类型,而我的视频类型与其他两种类型(文本和图像)不同
请注意:从服务器返回行时,必须考虑返回的聊天记录的创建日期顺序
您有什么建议?我的第一反应是将URL和持续时间作为子表返回。如果消息不是视频消息,则子表中将没有行。我的第一反应是将URL和持续时间作为子表返回。如果消息不是视频消息,则子表中将没有行。thx用于占用时间。您将如何有条件地在linq中将其写入该视频子表?如果我也决定使用图像子表呢?我认为Brian是对的,如果您需要一个用于图像数据的表,那么…您可以添加它。一个简单的
左连接
或在构建viewmodel时的单独查询。恐怕我无法帮助理解实际的LINQ语法-除了一些非常简单的教程之外,我从未使用过它。我的回答完全基于数据库设计原则。谢谢你花时间。您将如何有条件地在linq中将其写入该视频子表?如果我也决定使用图像子表呢?我认为Brian是对的,如果您需要一个用于图像数据的表,那么…您可以添加它。一个简单的左连接
或在构建viewmodel时的单独查询。恐怕我无法帮助理解实际的LINQ语法-除了一些非常简单的教程之外,我从未使用过它。我的回答完全基于数据库设计原则。