Учитывая, что вы уже ограничиваете штрих-код, ваша группировка бессмысленна. В основном ваш запрос может быть упрощен до:
var version = dataContext.GetTable<mailSortEntity>()
.Where(p => p.Barcode == barcode)
.Max(p => p.VersionNo);
РЕДАКТИРОВАТЬ: Если вам нужно разрешить ситуации, когда штрих-код вообще отсутствует в базе данных, вы можете использовать обнуляемую форму:
var version = dataContext.GetTable<mailSortEntity>()
.Where(p => p.Barcode == barcode)
.Max(p => (int?) p.VersionNo);
(при условии p.VersionNo
равно int
).
Это сделает version
Nullable<int>
с нулевым значением, если штрих-код отсутствует в базе данных.
Теперь без предложения where более логично иметь группировку - но вам нужна только часть версии, поэтому вы можете изменить группировку:
var results = from p in dataContext.GetTable<mailsortEntity>()
group p.VersionNo by p.Barcode into g
select g.Max();
С другой стороны, он не скажет, какой номер версии является максимальным для какого штрих-кода, поэтому вы можете захотеть:
var results = from p in dataContext.GetTable<mailsortEntity>()
group p.VersionNo by p.Barcode into g
select new { Barcode = g.Key, CurrentVersion = g.Max() };
Я не знаю, улучшат ли они ваш запрос производительность , но они являются более логичным представлением вашего запроса, что может упростить отслеживание того, что происходит с точки зрения производительности, с использованием профилирования SQL и т.д.