【问题标题】:Return Distinct Rows in the Web API在 Web API 中返回不同的行
【发布时间】:2016-12-19 22:10:12
【问题描述】:

我们目前正在查询 Oracle DB 并以 JSON 格式返回结果。查询结果正在返回更多重复的行。控制器如下所示

public HttpResponseMessage Getdetails([FromUri] string[] Column)
    {
     List<string> selectionStrings = new List<string>();
     string connStr = ConfigurationManager.ConnectionStrings["PConnection"].ConnectionString;
     using (OracleConnection dbconn = new OracleConnection(connStr))
     {
      DataSet userDataset = new DataSet();
      var colDict = new Dictionary<string, string>()
      {
       {"CATEGORY", "STCD_PRIO_CATEGORY_DESCR.DESCR"},
       {"SESSION_NUMBER", "STCD_PRIO_CATEGORY_DESCR.SESSION_NUM"},
       {"SESSION_START_DATE","Trunc(STCD_PRIO_CATEGORY_DESCR.START_DATE)"},
       {"SESSION_START_TIME","STCD_PRIO_CATEGORY_DESCR.START_DATE"}}};
            foreach (string col in Column)
            {
                string selector = colDict[col];
                selectionStrings.Add(string.Format("{0} AS {1}", selector, col));
            }
            string selectString = string.Join(",", selectionStrings);

            var strQuery =   string.Format(@"SELECT {0}
                             FROM 
                             STCD_PRIO_CATEGORY_DESCR", selectString);
     }}}

所以如果我只是在 Select 语句中添加 Distinct 为

 var strQuery =   string.Format(@"SELECT DISTINCT {0}
                             FROM 
                             STCD_PRIO_CATEGORY_DESCR", selectString);

这样就够了吗?或者我们应该把 DISTINCT 放在所有列名之前

【问题讨论】:

  • 您是否相信 DISTINCT 解决方案?结果如何?
  • yes DISTINCT 只在 SELECT 之后和指定列之前直接使用一次
  • @CodeNotFound 当我使用 Distinct 时没有区别。
  • @Matt 我尝试使用 DISTICT 但返回的行数是一样的
  • 如果你得到相同数量的不同记录,这意味着你已经只得到了 DISTINCT 记录。如果您期望更少的记录,您可能会包含一个列,该列使您并不真正需要或不想要的记录变得独一无二,并导致记录数高于预期

标签: c# sql asp.net asp.net-mvc oracle


【解决方案1】:

使用 distinct 或者如果您仍然遇到问题,您可以将数据结果移动到列表中并使用 linq 仅选择唯一行。

var result = myList.GroupBy(test => test.id)
                   .Select(grp => grp.First())
                   .ToList();

取自:Select distinct using linq

【讨论】:

  • 我们可以在不使用 Linq 的情况下直接在查询中提供它们吗
  • 这将加载比需要更多的数据
  • 它会,不是一个理想的解决方案,而是一个解决方法。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多