我在另一个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
答案 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时,您会收到什么异常?如果你告诉我们,或许我们可以帮你避免它...