如何进行此LINQ查询?

时间:2012-06-01 08:39:32

标签: c# asp.net-mvc linq entity-framework

我有一个下载列表,我填写了所有顾问。

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

enter image description here

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

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

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

感谢任何形式的帮助

提前致谢

更新

这就是我在Get Action Method中使用Linq方法的方法:

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

2 个答案:

答案 0 :(得分: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可以为空)

注意:看到Consultant可能有多个GoalCard,您可能希望将Consultant的{​​{1}}导航属性重命名为GoalCard(要说清楚可以有几个)。

答案 1 :(得分:1)

现在假设Complete_Date的类型为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(); 
}