Похоже, вы просто хотите, чтобы строки из db.is1
не имели повторяющихся db.isckts
совпадающих строк, поэтому вам нужно просто сгруппировать и вернуть is1
строки.
var result = from x in db.is1
where x.in_service == "Y"
join y in db.isckts on x.is_id equals y.is_id
where y.line_name == linename
group x by x.is_id into xg
where xg.Count() == 1
select xg.First();
Однако, поскольку вы просто используете группирование для подсчета объединенных строк, вы можете использовать вместо этого оператор LINQ Group Join:
var AjoinB = from x in db.tableA
where x.inservice
join y in db.tableB on x.is_id equals y.is_id into yj
where yj.Count(y => y.line_name == linename) == 1
select x;
Я переключился на лямбда-синтаксис, чтобы добавить условие к счету на y
; Вы можете добавить условие к db.tableB
, используя также метод Where
, или даже создать подзапрос для представления отфильтрованного db.tableB
:
var filtered_isckts = from y in db.isckts
where y.line_name == linename
select y;
var result = from x in db.is1
where x.in_service == "Y"
join y in filtered_isckts on x.is_id equals y.is_id into yj
where yj.Count() == 1
select x;
Чтобы изменить filtered_isckts
для включения только id
s в одну строку, выполните группировку по первому запросу:
var filtered_isckts = from y in db.isckts
where y.line_name == linename
group y by y.is_id into yg
where yg.Count() == 1
select yg.First();
var result = from x in db.is1
where x.in_service == "Y"
join y in filtered_isckts on x.is_id equals y.is_id
select x;