我开始学习ASP.NET Core,我遇到了一个错误而且不明白什么是问题。 它说:
IQueryable<Patron>
不包含FirstName
的定义,并且没有可以找到接受类型FirstName
的第一个参数的扩展方法IQueryable<Patron>
(您是否缺少using指令或汇编参考?“
到目前为止我的代码:
Patron.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace LibaryData.Models
{
public class Patron
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public DateTime DateOfBirth { get; set; }
public string TelephoneNumber { get; set; }
public virtual LibaryCard LibaryCard { get; set; }
public virtual LibaryBranch HomeLibaryBranch { get; set; }
}
}
CheckoutServices.cs
using LibaryData;
using LibaryData.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LibaryData.Models;
namespace LibaryServices
{
public class ChekoutService : ICheckout
{
private LibaryContext _context;
public ChekoutService(LibaryContext context)
{
_context = context;
}
public string GetCurrentCheckoutPatron(int assetId)
{
var checkout = GetCheckoutByAssetId(assetId);
if(checkout == null)
{
return "";
}
var cardId = checkout.LibaryCard.Id;
var patron = _context.Patrons
.Include(p => p.LibaryCard)
.Where(p => p.LibaryCard.Id == cardId);
return patron.FirstName + " " + patron.LastName;
}
private Checkout GetCheckoutByAssetId(int assetId)
{
return _context.Checkouts
.Include(co => co.LibaryAsset)
.Include(co => co.LibaryCard)
.Where(co => co.LibaryAsset.Id == assetId)
.FirstOrDefault(co => co.LibaryAsset.Id ==assetId);
}
}
}
因此,在方法CheckoutServices
的课程GetCurrentCheckoutPatron
中,我无法调用对象patron.
FirstName
和patron.
LastName
正如您所看到的所有课程都是公开的,已有参考文献
有什么建议吗?
答案 0 :(得分:2)
将INSERT (ID, Name, Description...) VALUES (Source.ID, Source.Name, Source.Description...)
替换为.Where
以获得.First
而不是Patron
请注意,如果您使用IQueryable<Patron>
,如果不匹配则可以引发例外。
但是,如果您使用.First
并且没有匹配,则会返回.FirstOrDefault
,因此您在尝试访问null
时会获得NullReferenceException
小心检查patron.FirstName
s
答案 1 :(得分:0)
在您的方法GetCurrentCheckoutPatron
中,变量patron
是IQueryable
。如果您只期望查询中的单个结果,则可能需要调用FirstOrDefault
。