当然,我做了一些研究并尝试了一些但却做不到的事。
到目前为止我有这个代码:
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
我的方法在查询之外也很有用。
我希望我能说清楚。
答案 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()
。