【问题标题】:Difficult "select" expression困难的“选择”表达
【发布时间】:2013-03-25 15:45:15
【问题描述】:

我有一个项目模型,它有多个“打开的任务”:

[NotMapped]
public IEnumerable<Task> OpenTasks
{
   get
   {
       //All tasks where status id == 1 (= open tasks)
       return Tasks.Where(t => t.TaskStatusId == (int)EnumTaskStatus.taskStatus.openTask);
   }
}

一个任务模型有多个用户:

public virtual ICollection<Useraccount> Useraccounts { get; set; }

现在我想获取项目的特定用户的所有未完成任务。 它看起来像这样:

project.OpenTasks.Where(my user is in t => T.useraccounts);

但我不确定我的 where 条件会是什么样子。

【问题讨论】:

    标签: asp.net-mvc-3 linq entity-framework


    【解决方案1】:

    试试这个:

    project.OpenTasks.Where(x => x.Useraccounts.Contains(myUser));
    

    如果Useraccount 不覆盖相等成员,则需要使用如下内容:

    project.OpenTasks.Where(x => x.Useraccounts.Any(x => x.Id == myUser.Id));
    

    【讨论】:

    • @mosquito87 project.OpenTasks.FindIndex(myUser) 更好?而不是内部循环?
    • @PankajGarg:这没有任何意义。 OpenTasks 返回任务,myUser 是用户。他们不会像这样混合。
    • 考虑一种情况,当您有 100 个任务时...每个任务可能有其唯一/重复的用户 ID。对?现在在您的帖子中查看上面的代码行。这表示对于每 100 个任务迭代,它会检查每个用户记录,不管是否存在任何匹配。对 ?这就是Contains 的魔力。
    • @PankajGarg:你的 cmets 完全没有意义。 (1) FindIndexList&lt;T&gt; 的成员。 OpenTasksIEnumerable&lt;Task&gt; 而不是 List&lt;Task&gt;。 (2)。即使OpenTasksList&lt;Task&gt; 类型,FindIndex 也需要Task 实例。但是你想传递一个Useraccount
    猜你喜欢
    • 2020-07-13
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多