Извлечение данных из sql в datagridview с использованием LinqToSql - PullRequest
1 голос
/ 18 июня 2019

У меня есть данные в sql и datagridview в winform. datatable содержит результаты измерений из пресс-формы с MouldID. Для каждого измерения 50 строк результатов заносятся в таблицу. Для отслеживания количества измерений для той же формы, у меня также есть столбец MeasId, который увеличивается на 1 для каждого входа измерения. Пожалуйста, смотрите картинку для просмотра таблицы. Table Screenshot Что мне нужно сделать, получить только строки с выбранным MouldID (из выпадающего списка) с последним MeasID. Я попробовал следующие коды, но я не мог понять, как сгруппировать эти строки с MeasId.

using (LinqDataClassesDataContext dataContext = new 
LinqDataClassesDataContext())
{
    // attemp 1
    var query=dataContext.SupplierVals                   
            .Where(m=>m.MouldID==comboBMouldID.SelectedValue.ToString())
            .OrderByDescending(m => m.MeasId).FirstOrDefault();

    // attemp 2
    var query=dataContext.SupplierVals                      
            .Where(mr=>mr.MouldID==comboBMouldID.SelectedValue.ToString())
            .OrderByDescending(mr => mr.MeasId).Select();

    // attemp 3
    var query = (from x in dataContext.SupplierVals
               where x.MouldID == comboBMouldID.SelectedValue.ToString()
               select x).First(); 

    // attemp 4
    var query = from x in dataContext.SupplierVals
            where x.MouldID == comboBMouldID.SelectedValue.ToString()
            group x by x.MeasId into grp
            select grp.OrderByDescending(x => x.MeasId).First();

daGridUnused.AutoGenerateColumns = false;
daGridUnused.Columns["unusedShowDist"].DataPropertyName = "Distnc";
daGridUnused.Columns["unusedShowAper"].DataPropertyName = "Apert";
daGridUnused.Columns["unusedShowTap"].DataPropertyName = "Taper";

daGridUnused.DataSource = query;

}

Ни один из этих запросов не возвращает то, что мне нужно из данных. Что я делаю не так?

1 Ответ

1 голос
/ 18 июня 2019

Кажется, ты был почти там.Вам просто нужно отфильтровать также по максимальному значению и порядку: ValueId:

string mouldId = comboBMouldID.SelectedValue.ToString();
int max = dataContext.SupplierVals                   
        .Where(m=>m.MouldID == mouldId)
        .Max(m => m.MeasId);
var query=dataContext.SupplierVals                   
        .Where(m=>m.MouldID == mouldId && m.MeasId == max).ToList();           

отказ от ответственности: этот запрос, безусловно, может быть оптимизирован, я работаю над лучшим решением

...