Linq C # linq group by into query отличается результатом запроса в SQL

#c# #.net #sql-server #linq

#c# #.net #sql-сервер #linq

Вопрос:

это мой первый пост здесь. Я ценю всю помощь, которую вы можете мне оказать.

Прямо сейчас я пытаюсь выполнить запрос с использованием Linq, но я замечаю, что результат неверный. Я выполнил тот же запрос, используя SQL, над таблицей в базе данных, и результат немного отличается.

Это SQL-запрос

 select [Categoria_H], count(*) as conteo
FROM TR_Movimientos
WHERE [TipoPago_H] <> 'Evasor' 
AND [TipoCliente_H] <> 'Evasor' 
AND [TipoPago_H] <> 'Exento'
group by [Categoria_H]
  

Это запрос Linq (2 версии)

1-й

 var qTraficoXCategoria = from reg in registrosDiarios 
where 
   reg.TipoPago_H != GlobalParams.TR_Tipo_Pago_Homologado_Evasor amp;amp;
   reg.TipoPago_H != GlobalParams.TR_Tipo_Pago_Homologado_Exento amp;amp;
   reg.TipoCliente_H != GlobalParams.TR_Tipo_Cliente_Homologado_Evasor
group reg by reg.Categoria_H into Agrupacion
select new
{ 
   CodigoCategoria = Agrupacion.Key,
   Trafico = Agrupacion.Count()
};
  

2-й

 var qTraficoXCategoriaTest1 = registrosDiarios.Where(
q =>( (q.TipoPago_H != GlobalParams.TR_Tipo_Pago_Homologado_Evasor)
amp;amp; (q.TipoCliente_H != GlobalParams.TR_Tipo_Cliente_Homologado_Evasor)
amp;amp; (q.TipoPago_H != GlobalParams.TR_Tipo_Pago_Homologado_Exento) ))
.GroupBy(o => o.Categoria_H)
.Select(g => new { CodigoCategoria = g.Key, Trafico = g.Count() });
  

Результатом в SQL-запросе является

 ╔══════════╦═══════╗
 Category  Count 
╠══════════╬═══════╣
 C1         5269 
 C2           82 
 C3          106 
 C4           41 
 C5           47 
 C6           85 
 CE_EG         5 
 CE_IE         2 
╚══════════╩═══════╝
  

и это результат в запросе linq

 ╔══════════╦═══════╗
║ Category ║ Count ║
╠══════════╬═══════╣
║ C1       ║  5268 ║ * Error
║ C2       ║    82 ║
║ C3       ║   106 ║
║ C4       ║    41 ║
║ C5       ║    47 ║
║ C6       ║    84 ║ * Error
║ CE_EG    ║     5 ║
║ CE_IE    ║     2 ║
╚══════════╩═══════╝
  

Наличие категорий C1 и C6 и ошибка в подсчете при его запуске linq.

Я ценю любые идеи или вклады, которые могут помочь мне устранить эту ошибку.

Комментарии:

1. У вас, вероятно, есть запись с пробелом в конце: SELECT * FROM TR_Movimientos WHERE RIGHT(TipoPago_H,1) = ' ' OR RIGHT(TipoCliente_H,1) = ' ')

2. Спасибо, я сделаю обрезку значений запроса linq.

3. Привет, там был фильтр и исходная коллекция «registrosDiarios». Я удаляю фильтр и работает. Спасибо за вашу помощь.