C# 搜索查询数据库第一个mvc
我想创建一个搜索按钮,使用户可以搜索成员并加载相关详细信息。我也在使用Ajax 共有3个类/表:C# 搜索查询数据库第一个mvc,c#,asp.net-mvc,linq,asp.net-mvc-4,asp.net-ajax,C#,Asp.net Mvc,Linq,Asp.net Mvc 4,Asp.net Ajax,我想创建一个搜索按钮,使用户可以搜索成员并加载相关详细信息。我也在使用Ajax 共有3个类/表: public Book() { this.Loans = new HashSet<Loan>(); } public int ISBN { get; set; } public string Name { get; set; } public string Author { get; set; } public
public Book()
{
this.Loans = new HashSet<Loan>();
}
public int ISBN { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public int OnLoan { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Loan> Loans { get; set; }
}
Loan Class
public partial class Loan
{
public int LoanId { get; set; }
public System.DateTime CheckOutDate { get; set; }
public System.DateTime ReturnDate { get; set; }
public decimal FinePrice { get; set; }
public Nullable<int> MemberId { get; set; }
public Nullable<int> ISBN { get; set; }
public virtual Book Book { get; set; }
public virtual Member Member { get; set; }
}
但是,当我运行此命令时,会收到错误消息:
LINQ to Entities无法识别方法“Library1.Models.Loan LastOrDefaultLoan”方法,并且无法将此方法转换为存储表达式
总之,我该如何得到最后一个显示的结果,而不是列表
这个问题与使用Last()或LastorDefault()引用答案的问题不同,因为在这里,即使我们切换到使用OrderByDescending()和First()或FirstorDefault(),答案/结果也不会起作用。
错误还在于返回列表的能力,即使我认为答案不应该返回列表
谢谢试试这个:
return db.Loans
.Where(a => a.MemberId.ToString().Contains(searchString) && a.Book.OnLoan == 1)
.OrderByDescending(c => c.MemberId)
.FirstOrDefault();
SQL不理解LastOrDefault
因此,您需要对列表进行排序。通过使用OrderByDescending
您将颠倒此顺序,因此可以获得最上面的记录
如果仍要传入集合,也可以使用OrderByDescending
return db.Loans
.Where(a => a.MemberId.ToString().Contains(searchString) && a.Book.OnLoan == 1)
.OrderByDescending(c => c.MemberId);
有关更多详细信息,请参阅
或者类似的问题:
试试这个:
return db.Loans
.Where(a => a.MemberId.ToString().Contains(searchString) && a.Book.OnLoan == 1)
.OrderByDescending(c => c.MemberId)
.FirstOrDefault();
SQL不理解LastOrDefault
因此,您需要对列表进行排序。通过使用OrderByDescending
您将颠倒此顺序,因此可以获得最上面的记录
如果仍要传入集合,也可以使用OrderByDescending
return db.Loans
.Where(a => a.MemberId.ToString().Contains(searchString) && a.Book.OnLoan == 1)
.OrderByDescending(c => c.MemberId);
有关更多详细信息,请参阅
或者类似的问题:
问题在于,您页面上的模型正在查找
列表,而您只向其发送贷款。在我发布此答案时,您的问题中没有控制器方法或视图,因此我将您的查询更改为:
private List<Loan> Gethistory(string searchString)
{
var loan = db.Loans
.Where(a => a.MemberId
.ToString()
.Contains(searchString) &&
a.Book.OnLoan == 1)
.OrderByDescending(a => a.LoanId)
.FirstOrDefault();
return new List<Loan> { loan };
}
private List Gethistory(字符串搜索字符串)
{
var贷款=db.贷款
.其中(a=>a.MemberId
.ToString()
.包含(搜索字符串)和
a、 Book.OnLoan==1)
.OrderByDescending(a=>a.LoanId)
.FirstOrDefault();
返回新列表{loan};
}
正如Stefan在回答中所说,SQL没有LastOrDefault
方法,因此您需要以一种更容易让EF转换为SQL的方式编写查询
或者,您可以将视图更改为具有单一贷款的模型,尽管这会使您显示它们/它的(可能)网格不那么直观。问题是您页面上的模型正在查找列表,而您只发送贷款。在我发布此答案时,您的问题中没有控制器方法或视图,因此我将您的查询更改为:
private List<Loan> Gethistory(string searchString)
{
var loan = db.Loans
.Where(a => a.MemberId
.ToString()
.Contains(searchString) &&
a.Book.OnLoan == 1)
.OrderByDescending(a => a.LoanId)
.FirstOrDefault();
return new List<Loan> { loan };
}
private List Gethistory(字符串搜索字符串)
{
var贷款=db.贷款
.其中(a=>a.MemberId
.ToString()
.包含(搜索字符串)和
a、 Book.OnLoan==1)
.OrderByDescending(a=>a.LoanId)
.FirstOrDefault();
返回新列表{loan};
}
正如Stefan在回答中所说,SQL没有LastOrDefault
方法,因此您需要以一种更容易让EF转换为SQL的方式编写查询
或者,您可以将视图更改为具有单个贷款的模型,但这会使您正在显示它们/它的(可能)网格不那么直观。使用.LastOrDefault(…)而不是.where
归还贷款
.LastOrDefault(a=>a.MemberId.ToString().Contains(searchString)和&a.Book.OnLoan==1)
它还可以提高性能。使用.LastOrDefault(…)而不是.where
归还贷款
.LastOrDefault(a=>a.MemberId.ToString().Contains(searchString)和&a.Book.OnLoan==1)
它还可以提高您的性能。还请包括部分视图历史搜索的源代码。
您还应添加ORDER BY以确保获得所需的行。还请包括部分视图历史搜索的源代码。您还应添加ORDER BY以确保获得所需的行。谢谢我要试一试。谢谢你的帮助,不客气。您共享的关于无法将贷款
转换为列表
的错误消息是我如何推断这是您的问题。当Razor引擎试图生成您的页面时引发错误。如果用户键入了错误的MemberId,则我希望出现一条错误消息,作为appose to dbnullexception。我将如何实现这一点?真的很感激。如果你正在做一个单一的成员或贷款,你不想返回相同的看法。您应该有多个视图。单个贷款的视图将更多地是一个详细信息页面,而不是显示多个贷款的网格。谢谢,我将尝试一下。谢谢你的帮助,不客气。您共享的关于无法将贷款
转换为列表
的错误消息是我如何推断这是您的问题。当Razor引擎试图生成您的页面时引发错误。如果用户键入了错误的MemberId,则我希望出现一条错误消息,作为appose to dbnullexception。我将如何实现这一点?真的很感激。如果你正在做一个单一的成员或贷款,你不想返回相同的看法。您应该有多个视图。单个贷款的视图将更多地是一个详细信息页面,而不是显示多个贷款的网格。谢谢,我将查看链接。感谢您的帮助谢谢我将查看链接。谢谢你的帮助