我有一个下载列表,我填写了所有顾问。
这是我用于此LINQ查询的实体:
我想要做的是让所有拥有带有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");
答案 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.Goalcard
将GoalCards
的所有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();
}