【问题标题】:Where condition in linq or lambda query issuelinq 或 lambda 查询问题中的 where 条件
【发布时间】:2013-11-28 06:42:58
【问题描述】:

这是初始查询。

var DevUsers = db.UserProfiles.Include("Tasks").Include("Projects").Include("FollowerTasks").Select(i => new
        {               
            Tasks = db.Tasks.Where(j => j.AssignedToPersonID == i.PersonID).Where(k => k.QAStatus != "Passed").Select(k => new
            {
                k.Projects,
                k.TaskName,
                k.ViewedByDeveloper,
                k.Status,
                k.QAStatus,
                k.ReleaseStatus,
                k.TaskID,
                k.DisplayTaskID,
                k.EstimatedDeliveryDate,
                k.AssignedToPerson.FirstName,
                Tags = k.Tags.Where(p => p.TagType == "General"),
                Modules = k.Tags.Where(p => p.TagType == "Module"),
                CodeTables = db.CodeTables.Where(l => l.Status == k.Status).FirstOrDefault(),
            }).OrderBy(k => k.ViewedByDeveloper).ThenBy(k => k.CodeTables.DisplayOrder).ThenByDescending(k => k.ReleaseStatus),
            i.PersonID,
            i.FirstName,
            i.LastName,
            i.UserID,
            i.EmailAddress,
        }).OrderBy(i => i.FirstName);

我无法在此DevUsers 中进行任何类型的查询

DevUsers = DevUsers.Where(m=>m.PersonID==1);

给出错误“无法转换源...”

我如何应用 where 条件。我需要在这里为PersonID(int)Status(int) 申请条件。

【问题讨论】:

  • “PersonID”是什么类型?
  • OrderBy return IOrderedEnumerable, Where - IEnumerable

标签: c# sql linq lambda


【解决方案1】:

您的DevUsersIOrderedEnumerable<T>,不能隐式转换为IEnumerable<T>,因此您应该像这样定义一个新变量:

var newDevUsers =  DevUsers.Where(m=>m.PersonID==1);

或使用AsEnumerable() 修改您的上一个查询,如下所示:

//...
}).OrderBy(i => i.FirstName).AsEnumerable();
DevUsers = DevUsers.Where(m=>m.PersonID==1);

【讨论】:

  • 谢谢。但我仍然无法搜索状态。 DevUsers = DevUsers.Where(m=>m.Tasks.Status==1); Status 未识别。
  • @remrowruchan 你是什么意思?看起来这不是你在问题中描述的问题,你应该多谈谈。
  • 我需要PersonID(如你所说)和Status的条件。
  • @remrowruchan 其他属性呢? (在Status 旁边),您在智能感知弹出窗口中看到它们了吗?
  • 哦,现在我明白了...任务也是IOrderedEnumerable<T>,因此需要将其转换为IEnumerable<T>。谢谢
【解决方案2】:

第二个问题的答案(发表在 King King 答案的评论中)是:m.Tasks 是集合(在这种情况下为IOrderedEnumerable<T>)并且没有Status 属性。

如果您希望所有任务都具有指定状态,则应使用DevUsers = DevUsers.Where(m => m.Tasks.All(t => t.Status==1))
如果您希望任何任务具有指定状态,您应该使用DevUsers = DevUsers.Where(m => m.Tasks.Any(t => t.Status==1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多