基本上我想知道是否有可能使用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方法中抽象出我的所有过滤和其他代码来减少代码重复?
答案 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)){
...
}