我有两张桌子:
阶段:
long ID
string Name
和另一个活动:
long ID
string Name
long PhaseID
我已经知道阶段的名称,我想获得这些特定阶段的活动。我是否将PhaseName添加到活动表中,还是通过LINQ中的连接来实现?
也许是这样的?
var query = from a in entities.Activities
join p in entities.Phases on a.PhaseId equals p.Id
where p.Name == "Preplanning"
...在这里我不知道如何完成这个查询..
感谢您的帮助!
答案 0 :(得分:2)
您提供的代码将使用Inner Join
查找存在名称“预先计划”的阶段的所有活动。
要完成查询,您需要添加一个select子句。
var query = from a in entities.Activities
join p in entities.Phases on a.PhaseId equals p.Id
where p.Name == "Preplanning"
select a.Name
将返回所有活动名称的IEnumerable<string>
。
答案 1 :(得分:2)
只需根据需要选择活动:
var query = from a in entities.Activities
join p in entities.Phases on a.PhaseId equals p.Id
where p.Name == "Preplanning"
select a;
以下是query expression的样子:
查询表达式必须以来自子句开头,并且必须以选择或组子句结束。在第一个from子句和最后一个select或group子句之间,它可以包含一个或多个这些可选子句:where,orderby,join,let甚至是from子句。您还可以使用into关键字将join或group子句的结果作为同一查询表达式中其他查询子句的源。
与令人费解的图像相同:
使用方法语法,您无需使用特殊内容结束查询:
var query = entities.Phases
.Where(p => p.Name == "Preplanning")
.Join(entities.Activities, p => p.Id, a => a.PhaseId, (p,a) => a);
答案 2 :(得分:1)
如果您只需要其中一个表中的数据,则无需进行连接。您可以改为使用过滤器:
var q = entities.Activities.Where(a =>
entities.Phases.Any(p => a.PhaseId == p.Id && p.Name == "Preplanning"));