如何在Linq查询中调用方法?

时间:2013-12-02 15:35:14

标签: c# asp.net linq

当然,我做了一些研究并尝试了一些但却做不到的事。

到目前为止我有这个代码:

var workLogs = (from wl in _db.WorkLogs
                        where (wl.Users_UserId == userId && wl.Works_WorkId == workId && wl.Date > beginDate && wl.Date < endDate)
                        select new
                        {
                            wl.Users_UserId,
                            wl.Works_WorkId,
                            wl.Time,
                            wl.Date
                        })
                       .AsEnumerable()
                       .Select(wl => new 
                       { 
                           userName = GetUserNameFromId(wl.Users_UserId), 
                           workName = GetWorkNameFromId(wl.Works_WorkId),
                           wl.Time,
                           wl.Date
                       });

正如您所看到的,我尝试了枚举,但是当我运行应用程序时,workLogs变为空。当我用断点检查它时,我看到“枚举没有结果。”

我想做的是在workLogs中返回工作和用户名。我写了两个方法来做到这一点。我只能在我的Linq查询中调用它们。

如果没有我的方法,它可以正常工作:http://i.imgur.com/ALb5f0K.png

我的方法在查询之外也很有用。

我希望我能说清楚。

3 个答案:

答案 0 :(得分:1)

如果没有结果,则表示您的基础源没有数据,或者您的where子句过滤掉的内容超出了您的预期。您的select语句可能会导致通常返回结果的序列返回无结果,这是没有问题的。最多可能会导致它抛出异常。

答案 1 :(得分:0)

以下代码没有理由不起作用。您不需要其他代码来完成这项工作。 如果返回没有结果,则只表示where子句正在过滤所有内容。 使用if语句创建一个手动foreach来调试它,您将看到LINQ请求没有问题。

var workLogs = from wl in _db.WorkLogs
                        where (wl.Users_UserId == userId && wl.Works_WorkId == workId && wl.Date > beginDate && wl.Date < endDate)
                        select new
                        {
                            GetUserNameFromId(wl.Users_UserId),
                            GetWorkNameFromId(wl.Works_WorkId),
                            wl.Time,
                            wl.Date
                        }

答案 2 :(得分:-1)

尝试将.AsEnumerable()替换为.ToArray()