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

时间:2016-10-28 08:17:24

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

基本上我想知道是否有可能使用Entity Framework作为示例,当提供的id与表中的任何id不匹配时,从DB表中检索所有记录,但是如果有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是因为我在其中做了很多过滤和代码特定的东西。我可以使用两种方法,1用于所有记录,另一种用于特定记录。

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

3 个答案:

答案 0 :(得分:2)

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

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();

    // ...
}

答案 1 :(得分:0)

 docs =  dbContext.tblSalesQuoteDocuments.Any(x => x.HeaderId == id)?  dbContext.tblSalesQuoteDocuments.Where(x => x.HeaderId == id) :  dbContext.tblSalesQuoteDocuments.ToList();

答案 2 :(得分:0)

你应该使用

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