2

我有一个包含所有顾问的下拉列表。

这是我用于此 LINQ 查询的实体:

在此处输入图像描述

我想要做的是获取所有具有 Complete_date 设置的目标卡的顾问 ID。我不知道该怎么做。

现在,我有以下 LINQ 查询来获取所有顾问 ID。

public List<Consultant> GetAllConsultantsByID()
{
    var allConsultants = from id in db.Consultant
                         select id;
    return allConsultants.ToList();
}

任何形式的帮助表示赞赏

提前致谢

更新:

这就是我必须在我的 Get Action 方法中使用我的 Linq 方法的方式:

var consultants = repository.GetAllConsultantsByID();
model.Consultants = new SelectList(consultants, "Id", "Name");
4

2 回答 2

3

您可以使用Consultant.GoalCard导航属性和Any扩展方法:

var query = from con in db.Consultant
            where con.GoalCard.Any(card => card.Completed_Date != null)
            select con;
return query.ToList();

Consultant.GoalcardGoalCards将所有的公开Consultant为可查询的属性。因此,您也可以对此执行查询。(此示例假设Completed_Date可以为空)

注意:看到 aConsultant可以有多个GoalCards,您可能希望将ConsultantGoalCard导航属性重命名为GoalCards(以明确可以有多个)。

于 2012-06-01T08:43:47.693 回答
1

现在假设Complete_Date是 type DateTime?,你可以这样做:

public IEnumerable<Consultant> GetConsultantIds()
{
     return db.Consultant.Where(c => c.GoalCard != null && c.GoalCard.Completed_Date.HasValue).Select(c => c.Id).AsEnumerable(); 
}

[编辑]

由于GoalCard是一个集合(误导性名称:)),您可以执行类似的操作来获取在任何卡片上设置了至少一个已完成日期的顾问的 ID:

public IEnumerable<int> GetConsultantIds()
{
     return db.Consultant.Where(c => c.GoalCard != null && c.GoalCard.Any(card => card.Completed_Date.HasValue)).Select(c => c.Id).AsEnumerable(); 
}

这仅适用于 ID 列表,适用于Consultant符合条件的对象列表:

public IEnumerable<Consultant> GetConsultantIds()
{
     return db.Consultant.Where(c => c.GoalCard != null && c.GoalCard.Any(card => card.Completed_Date.HasValue)).AsEnumerable(); 
}
于 2012-06-01T08:43:35.207 回答