IQueryable <patron>不包含FirstName的定义,也没有扩展方法First Name

时间:2018-04-17 07:35:24

标签: linq asp.net-core

我开始学习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 正如您所看到的所有课程都是公开的,已有参考文献 有什么建议吗?

2 个答案:

答案 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中,变量patronIQueryable。如果您只期望查询中的单个结果,则可能需要调用FirstOrDefault