#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». Я удаляю фильтр и работает. Спасибо за вашу помощь.