【问题标题】:Retrieving data from sql to datagridview using LinqToSql使用 LinqToSql 将数据从 sql 检索到 datagridview
【发布时间】:2019-06-18 08:05:15
【问题描述】:

我在 sql 中有一个数据表,在 winform 中有一个 datagridview。数据表保存来自具有 MoldID 的模具的测量结果。对于每次测量,都会将 50 行结果记录到表中。为了跟踪同一模具的测量计数,我还有 MeasId 列,每个测量输入都会增加 1。请参阅图片以查看表格视图。 我需要做的是,仅检索带有最后一个 MeasID 的选择 MouldID(来自组合框)的行。 我尝试了以下代码,但我不知道如何使用 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;

}

这些查询都不会从数据表返回我需要的内容。 我做错了什么?

【问题讨论】:

  • 整个项目都是用 linq 构建的,所以我现在有点坚持
  • " with last MeasID." 这是否意味着所有具有最高 MeasID 的条目中的最新条目?
  • @MongZhu 是的,没错。 MeasId 计数最高。

标签: c# winforms linq-to-sql


【解决方案1】:

看来你快到了。您只需按最大值过滤并按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();           

免责声明:这个查询肯定可以优化,我正在寻找更好的解决方案

【讨论】:

  • 仅供参考,它也没有从表中返回任何数据。
  • 这实际上是一个挑战。现在在桌子上,这个模具只有 1 个 MouldID 和 3 个 MeasId。但在真正的应用程序中,会有很多 MouldID 和它们的测量值。数据需要通过这两个参数来区分。我需要行显示(let2
  • @TeoLaferla 这不是重点,重点是您有多行具有相同的MouldId、相同的MeasId,甚至是相同 Date !从您的示例看来,您似乎只能通过 ValueID 列来区分它们。你发布的例子离现实有多远?我不会读心术,我只能根据你的描述为posted问题提供解决方案
  • @TeoLaferla 好的,然后只需删除 orderby 子句。我分心了,因为您在发布的 4 个查询中有 3 个使用了 First 或 FirstOrDefaul。我以为你只需要 1 行。我编辑了我的帖子。看看
  • 非常感谢。就是这样。
猜你喜欢
  • 2021-10-02
  • 2019-11-03
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多