为什么我的 LINQ 查询不从数据库中打印出数据?

Why do not my LINQ query print out data from the database?

我有两个独立的 classes。登录和用户内容。我希望如果你输入你的个人号码,你应该“登录”。然后你应该可以得到数据了。

我将数字传递给 BankContent 方法。在那里我想从用户那里得到名字,但是当我写的时候我只把这条消息发送到控制台。 Welcome! Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[System.String] 所以我没有得到用户的名字。有谁知道为什么?

登录class

public class Login : ILogin
    {
        private readonly UserContent _userContent;
        private readonly ApplicationDbContext _db;

        public Login(UserContent userContent, ApplicationDbContext db)
        {
            _userContent = userContent;
            _db = db;
        }

       public void Enter()
        {
            Console.WriteLine("Enter your Social Number to login");
            var number = Convert.ToInt32(Console.ReadLine());
            var result = _db.Customers.Where(x => x.SocialNumber == number).Any();
            
            if (_db == null)
            {
                Console.WriteLine($"No customer with {number} was found");
                return;
            }
            if (result == true)
            {
               
                _userContent.BankContent(number);
            }
            else
            {
                Console.WriteLine($"No customer with {number} was found!");
            }


          
        }
    }

使用 BankContent 方法的 UserContent

  public class UserContent : IUserContent
    {
        private readonly ApplicationDbContext _db;

        public UserContent(ApplicationDbContext db)
        {
            _db = db;
        }

        public void BankContent(int number)
        {
            var name = _db.Customers.Where(z => z.SocialNumber == number).Select(x => x.FirstName);

            Console.WriteLine("Welcome! " + name);
        }
    }

Select() 方法在源 IEnumerable<T> 序列的每个元素上调用提供的选择器委托,并且 return 一个新结果 IEnumerable<U> 序列包含每个元素的输出调用。

所以在你的情况下:

var name = _db.Customers.Where(z => z.SocialNumber == number).Select(x => x.FirstName).FirstOrDefault();

使用 FirstorDefault() 方法将 return 序列的第一个元素或默认值(如果元素不存在)。