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#

Другие вопросы по тегам