亚音速3 LINQ投影问题,固定还是否?

时间:2010-06-24 15:47:55

标签: linq subsonic subsonic3 projection

我目前遇到此处提到的问题(以及其他几个地方):Subsonic 3 Linq Projection Issue

这是使用3.0.0.4发行版软件包发生的,当我从GitHub获取最新版本并构建它时也会发生这种情况。

我正在使用LINQ模板。

我有这段代码:

        var newModel = new ViewModels.HomeIndexViewModel() {
            PulseListViewModel = 
                new ViewModels.PulseListViewModel 
                {
                    Pulses = from p in _pulseQuery
                             join a in _accountQuery on p.AccountId equals a.AccountId
                             orderby p.CreateDate descending
                             select new PulseListViewModel.Pulse() 
                                {
                                      AccountName = a.Name
                                    , Category = p.Category
                                    , CreateDate = p.CreateDate
                                    , Link = p.Link
                                    , Message = p.Message
                                    , Source = p.Source
                                    , Title = p.Title
                                }
                }
        };

但AccountName始终为空。

如果我将AccountName更改为Name:

        var newModel = new ViewModels.HomeIndexViewModel() {
            PulseListViewModel = 
                new ViewModels.PulseListViewModel 
                {
                    Pulses = from p in _pulseQuery
                             join a in _accountQuery on p.AccountId equals a.AccountId
                             orderby p.CreateDate descending
                             select new PulseListViewModel.Pulse() 
                                {
                                    Name = a.Name
                                    , Category = p.Category
                                    , CreateDate = p.CreateDate
                                    , Link = p.Link
                                    , Message = p.Message
                                    , Source = p.Source
                                    , Title = p.Title
                                }
                }
        };

工作正常。但这在我们的项目中是不可接受的;我不能总是把这些名字排成一行(除了事实,如果可能的话,它会让事情变得不那么清楚。)

但我很困惑,因为看起来这个问题已得到解决:

“修正了投影返回null或空设置的问题”

- http://blog.wekeroad.com/2010/03/21/subsonic-3-0-0-4-released

那么,任何人都可以告诉我:这个问题是不是已修复,我是否必须应用http://github.com/funky81/SubSonic-3.0/commit/aa7a9c1b564b2667db7fbd41e09ab72f5d58dcdb此处的更改来完成此工作?或者我错过了什么。因为查看当前的SubSonic源,看起来已经包含了此修复程序。我觉得这应该是简单而有效的,但我花了相当多的时间。

3 个答案:

答案 0 :(得分:2)

如果你(我)根据这里的答案修改SubSonic.Core:Subsonic 3.0 and linq

然后投影正常工作。

但是,我认为这是一个非常糟糕的解决方案,因为它需要分配一个项目并引入一个数量级的性能下降。

答案 1 :(得分:2)

你能给我发一些代码(尤其是_pulseQuery和_accountQuery背后的代码),所以我可以解决这个问题。您是直接使用SimpleRepository还是ActiveRecord方法还是Query对象?

答案 2 :(得分:1)

在这里复兴一个旧主题,但万一有人稍后会搜索...

我也“修复”了同样的问题,并在评论中提出了一些解释,在我的这个提交中的GitHub上:https://github.com/rally25rs/SubSonic-3.0/commit/61af6aeb2ebb95f486d8df533bf13c8754d443e2

这里实际上还有一个稍微深一点的问题。如果你选择使用“标准的.NET内置”投影,那么一些SubSonic单元测试开始失败,因为SS在其投影生成中做了一些额外的东西,而.NET投影却没有,所以一些SS的预期功能不起作用。

我个人认为,性能较慢(虽然我没有注意到速度下降)是支付正确数据的一个小代价。