Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq查询以有条件地返回不同类型的集合_C#_Linq To Sql - Fatal编程技术网

C# 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 { // });

使用Linq恢复不同类型集合的最佳方法是什么。 我有一张聊天桌,里面有不同类型的聊天信息:

  • 纯文本
  • 形象
  • 录像带
表中的列为:

  • 身份证
  • 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语法-除了一些非常简单的教程之外,我从未使用过它。我的回答完全基于数据库设计原则。