是否可以使用所有记录或匹配id方法从数据库检索记录

本文关键字:记录 id 方法 检索 数据库 可以使 是否 | 更新日期: 2023-09-27 18:15:18

基本上我想知道是否有可能使用作为一个例子,实体框架,从DB表中检索所有记录时,提供的id不匹配表中的任何id,但如果有id匹配,那么只检索这些记录。

如果使用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是因为我做了很多过滤和代码特定的东西在它。我可以使用两个方法,一个用于所有记录,另一个用于特定记录。

所以我应该像我上面的问题那样做,还是只使用两个方法,并在辅助方法中抽象所有过滤和其他代码,以减少代码重复?

是否可以使用所有记录或匹配id方法从数据库检索记录

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

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();
    // ...
}
 docs =  dbContext.tblSalesQuoteDocuments.Any(x => x.HeaderId == id)?  dbContext.tblSalesQuoteDocuments.Where(x => x.HeaderId == id) :  dbContext.tblSalesQuoteDocuments.ToList();

你应该使用

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