如何改变这个LINQ to SQL,以便它不会在运行时轰炸?

时间:2009-10-10 16:28:51

标签: linq-to-sql

   public IQueryable<Story> FindAllStories(){
        var stories = (from s in db.Stories
                       orderby s.DateEntered descending
                       select new Story
                       {     
                            Title = s.Title,
                            UserName = s.aspnet_User.UserName
                        }
                       );

        return stories;
    }

我需要将其作为IQueryable传递,因此我在网上找到的分页助手只能提取我需要的项目。问题是在运行时辅助程序尝试执行source.Count();编译器不是一个快乐的露营者,因为它是“实体类型查询的明确构造”。

如何更改此LINQ to SQL方法,以免发生这种情况?

另外,为了帮助我理解这一点,为什么以前的代码不起作用而且这个代码呢?

   public IQueryable<Story> FindAllStories(){
        var stories = (from s in db.Stories
                       orderby s.DateEntered descending
                       select s);

        return stories;
    }

更新

我开始认为实现这一目标的方法(经验证可行)是创建一个名为UserStory的POCO。新类有2个属性:一个是Story类型,另一个是UserName。然后,我可以毫无问题地返回一个IQueryable的UserStory。

那很好;但是,我仍然不明白为什么这种方法会起作用而我的另一种方法不起作用。另一种是将字符串UserName的属性添加到我的部分类Story中,并在层之间传递该对象。有什么不同?

1 个答案:

答案 0 :(得分:0)

以下链接指向博客文章,描述了与您类似的问题。似乎解决方案是返回一个从Story而不是Story类型中隐含的类型:

http://devlicio.us/blogs/derik_whittaker/archive/2008/04/25/linq2sql-explicit-construction-of-entity-exception.aspx

希望这有帮助。