【发布时间】:2017-08-01 12:32:50
【问题描述】:
我想创建一个搜索按钮,使用户能够搜索成员并加载相关的详细信息。我也在使用 Ajax BeginForm。
有 3 个类/表:
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; }
}
会员等级:
public partial class Member
{
public Member()
{
this.Loans = new HashSet<Loan>();
}
public int MemberId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string PostCode { get; set; }
public int TelNo { get; set; }
public virtual ICollection<Loan> Loans { get; set; }
}
在我的 BHistory 控制器中:
public ActionResult HistorySearch(string qh)
{
var history = Gethistory(qh);
return PartialView(history);
}
private List<Loan> Gethistory(string searchString)
{
return db.Loans
.Where(a => a.MemberId.ToString().Contains(searchString) && a.Book.OnLoan == 1)
.ToList();
}
所以在搜索工作正常的那一刻,它会返回正确的结果,在浏览器中用户输入 memberid 并且 会出现一个结果列表。但是我只希望出现最后一个结果。不是结果列表
所以我不想使用 ToList(),而是使用 LastorDefault(), 但我收到错误消息: 无法将 Models.Loan 转换为 collections.generic.list。
所以我编辑了 ActionMethod
private Loan Gethistory(string searchString)
{
return db.Loans
.Where(a => a.MemberId.ToString().Contains(searchString) && a.Book.OnLoan == 1)
.LastorDefault();
但是,当我运行它时,我收到了错误消息:
LINQ to Entities 无法识别方法 'Library1.Models.Loan LastOrDefaultLoan' 方法,并且该方法无法转换为存储表达式。
总之,我如何让最后的结果出现,而不是列表。
这个问题与使用 Last() 或 LastorDefault() 引用答案的问题不同,因为即使我们切换到使用 OrderByDescending() 和 First() 或 FirstorDefault() 答案/结果也不起作用. 错误还在于即使我认为答案不应该返回列表也可以返回列表
谢谢
【问题讨论】:
-
另外请附上部分视图的源代码
HistorySearch。 -
您还应该添加一个 ORDER BY 以确保您获得所需的行。
标签: c# asp.net-mvc linq asp.net-mvc-4 asp.net-ajax