Linq join, group, count где count больше значения
У меня есть следующее выражение linq, которое позволяет мне объединить две таблицы, сгруппировать их по DSCID
, а затем получить количество сгруппированных значений:
var qryGeoApppendCount =
from a in append
join g in geo
on a.Field<string>("RNO")
equals g.Field<string>("RNO")
group g by g.Field<int>("DSCID") into appendGeo
select new
{
DscId = appendGeo.Key,
DscIdCount = appendGeo.Count()
};
Мне нужно сделать еще один шаг, выбрав только число, большее 1. Я пробовал что-то вроде этого:
select new
{
DscId = appendGeo.Key,
DscIdCount = appendGeo.Count(n => n.Count > 1)
};
но это не сработало. Я должен быть в состоянии выдать ошибку всякий раз, когда qryGeoAppendQuery
возвращает записи с числом> 1, поэтому в идеале запрос должен быть заключен в оператор if.
4 ответа
Решение
var qryGeoApppendCount =
(from a in append
join g in geo
on a.Field<string>("RNO")
equals g.Field<string>("RNO")
group g by g.Field<int>("DSCID") into appendGeo
select new
{
DscId = appendGeo.Key,
DscIdCount = appendGeo.Count()
})
.Where(a => a.DscIdCount > 1);
Не могли бы вы просто сделать...
select new
{
DscId = appendGeo.Key,
DscIdCount = appendGeo.Where(n => n.Count > 1).Count()
};
или если вы просто хотите знать, если таковые имеются...
select new
{
DscId = appendGeo.Key,
ThrowException = appendGeo.Any(n => n.Count > 1)
};
var qryGeoApppendCount =
from a in append
join g in geo
on a.Field<string>("RNO")
equals g.Field<string>("RNO")
group g by g.Field<int>("DSCID") into appendGeo
where appendGeo.Count() > 1
select new
{
DscId = appendGeo.Key,
DscIdCount = appendGeo.Count()
};
Вы не можете добавить предложение where перед выбором? Это сработало в моем примере, но я не уверен, не увидев данные.
"SELECT [SubsNumber], sum([Usage_MB])/1024 as GB FROM [VASCDR].[dbo].[nrmSubsDailyMBUsage] where SubsNumber ='" + textBox1.Text.Trim() + "'" group by [SubsNumber] ;
Как это сделать с помощью C#