即使列表为空,LINQ也会返回计数

时间:2011-09-13 02:21:27

标签: c# .net linq linq-to-sql

我在另一个LINQ语句中有这个代码块。

 VideoLinks = (from video in m.VideoLinks.DefaultIfEmpty(new VideoGallery())
                                              orderby video.CreatedDate
                                              select new VideoGallery()
                                              {
                                                  Source = video.Source,
                                                  Type = video.Type,
                                                  Links = video.Links,
                                                  Title = video.Title
                                              }).ToList()

不幸的是,如果不使用DefaultIfEmpty它通过我的例外。如果我使用DefaultIfEmpty,即使m.VideoLinks为null,我也会为视频链接计数为1。

现在,如果m.VideoLinks为空,如何避免计数为1

3 个答案:

答案 0 :(得分:6)

DefaultIfEmpty将为您提供默认值。当你在它上面调用ToList()时它被计为一个项目......因此你的计数是1。

答案 1 :(得分:2)

看起来你正在使用linq-to-objects,所以你应该添加where video != null

VideoLinks = (from video in m.VideoLinks
              where video != null
              orderby video.CreatedDate
              select new VideoGallery()
              {
                Source = video.Source,
                Type = video.Type,
                Links = video.Links,
                Title = video.Title
              }).ToList()

答案 2 :(得分:1)

wllmsaccnt是正确的 - 您的问题是语句的“DefaultIfEmpty”部分。根据定义,您要求根据此方法的定义,集合中至少有一个项目:

  

返回指定序列的元素或指定的值   如果序列为空,则在单例集合中

我认为这里的重要问题是,当您不使用DefaultIfEmpty时,您会收到什么异常?如果你告诉我们,或许我们可以帮你避免它...