【问题标题】:Is it possible to retrieve records from a database using an either all records or matching id method?是否可以使用所有记录或匹配 id 方法从数据库中检索记录?
【发布时间】:2016-10-28 17:18:16
【问题描述】:

基本上我想知道是否可以使用实体框架作为示例,当提供的 id 与表中的任何 id 不匹配时,从 DB 表中检索所有记录,但如果有 id match 然后只检索那些记录。

如果您使用 if 语句或 ?: 表达式,显然可以做到这一点,如下面的示例。

var dbDocuments = new List<tblSalesQuoteDocument>();

    if (id < 0)
        dbDocuments = dbContext.tblSalesQuoteDocuments.ToList();
    else
        dbDocuments = dbContext.tblSalesQuoteDocuments.Where(x => x.HeaderId == id).ToList();

但我觉得这很难看,因为如果你想要所有记录,你的 URL 基本上是 Documents/Index/-1 或任何小于 0 的值。

有没有更好的办法?

为什么我想要一个 ActionResult 是因为我在其中做了很多过滤和编码特定的东西。我可以使用两种方法,一种用于所有记录,另一种用于特定记录。

那么我应该按照上面的问题来做,还是只使用两种方法并在 Helper Methods 中抽象出我的所有过滤和其他代码以减少代码重复?

【问题讨论】:

  • 这是什么,当ID与任何现有记录都不匹配时,您是否想要所有记录,或者当ID小于0时?这些不是一回事。
  • 如果措辞不当,请见谅。下面 mybirthname 的注释是有意义的,因为当没有传递参数并且 id 为 null 时,应检索所有记录,但如果提供了 id,则仅应检索与该 id 匹配的记录。我知道可以使用下面带有 if 等注释的示例来完成,但是可以不使用 if 或 吗?:
  • 所以你希望你的代码在不使用任何条件逻辑的情况下做有条件的不同事情?为什么?为什么不想使用if?:
  • 我从来没有说过我想那样使用它,或者我不会使用条件逻辑。我想知道这是否可能。我很想知道是否可以使用 Linq 或 Lambda 以这种方式查询数据库。就这么简单。

标签: c# asp.net-mvc entity-framework


【解决方案1】:

您可以根据需要添加过滤器表达式。示例:

ActionResult MyAction(int? id = null)
{
    // ...

    IQueryable<QuoteDocuments> docs = dbContext.tblSalesQuoteDocuments;

    if (id != null)
    {
        docs = docs.Where(x => x.HeaderId == id.Value);
    }

    var list = docs.ToList();

    // ...
}

【讨论】:

  • 我认为他的问题是他不想写 Documents/Index/-1 url 部分。
  • @mybirthname 哦,好的。这也是有道理的。我更新了我的答案。
【解决方案2】:
 docs =  dbContext.tblSalesQuoteDocuments.Any(x => x.HeaderId == id)?  dbContext.tblSalesQuoteDocuments.Where(x => x.HeaderId == id) :  dbContext.tblSalesQuoteDocuments.ToList();

【讨论】:

    【解决方案3】:

    你应该使用

    if(dbContext.tblSalesQuoteDocuments.Any(x => x.HeaderId == id)){
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多