C# C/Entity框架中的LINQ表达式

C# C/Entity框架中的LINQ表达式,c#,mysql,entity-framework,linq,C#,Mysql,Entity Framework,Linq,我是C、实体框架和Linq的新手,希望有人能解释一下Linq的代码。我的程序中有一个从表中选择用户的方法。该方法是: public static cp_user SelectUser(string user, string passw) { try { cp_user entityUser = (from u in _db.cp_user where u.user

我是C、实体框架和Linq的新手,希望有人能解释一下Linq的代码。我的程序中有一个从表中选择用户的方法。该方法是:

 public static cp_user SelectUser(string user, string passw)
    {
        try
        {
            cp_user entityUser = (from u in _db.cp_user
                                  where u.username == user && u.password == passw
                                  select u).FirstOrDefault();

            return entityUser;
        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        return null;
    }
cp_user是与数据库中的表相对应的类。而_db是一个字段,它保存对数据库实例的引用

在select user方法中,我知道有一个cp_user类型的局部变量的创建,它由以下语句定义:

(from u in _db.cp_user
                              where u.username == user && u.password == passw
                              select u).FirstOrDefault();
我对声明的第一部分感到困惑。来自u in_dp.cp_用户。 到目前为止,我一直在使用MySQL,所以从美国看到这一点让人困惑。在MySQL中,这个u指的是一个表。但在林克,我对它的作用感到困惑

不过,我确实大致理解了语句的其余部分,即方法中的用户名和密码参数必须等于表中的数据。它将返回数据库对象。但又一次对u感到困惑,在最后一部分说选择u

我的另一个问题是另一个名为checkany的方法,它检查用户登录是否正确:

 public static bool CheckAny(string user, string passw)
    {
        bool itIsAlredy = _db.cp_user.Any(u => u.username == user && u.password == passw);
        return itIsAlredy;
    }
我知道它接受用户名和密码,并创建一个布尔变量,该变量可以根据语句返回true或false。这是我不明白的部分

对我来说,这个语句u=>u.username==user&&u.password==passw;看起来这意味着方法参数中的用户名和密码必须存在于数据库中。但学校里有人告诉我,这意味着用户名和密码必须正确对应;您不能有连接到其他用户名的密码。那么这句话到底是怎么说的呢。同样,我也不明白整个u=>u.username。就像你所代表的那样。它是特殊的linq语法吗?如果是,它意味着什么? 我很抱歉,如果我有任何错误的声明,请纠正我,如果我是新的编程一般只与MySQL之前工作。如果有人能回答我提出的3个问题,我将不胜感激,请对我的知识缺乏耐心


提前感谢

正在将较大列表中的元素按元素方式传递给方法。编写lambda表达式以使用输入参数u获取元素。这意味着学校里的人是正确的,一个u必须有用户名==user和密码==passw

对于from子句,您可以查看

从u in_db.cp_用户很简单。就像foreach循环一样,您正在集合中定义一个项。u是项,_db.cp_user是集合,它只是在集合中循环,u是给定项的句柄

select u只是返回集合中的特定项

u=>u.username只是检查具有username属性的u对象im gussing user是否等于传递到方法中的user string参数

from u in _db.cp_user,其中u.username==user&&u.password==passw选择u类似于Select*from _db.cp_user,其中username==user&&password==passw。_db.cp_用户中的from u将u定义为_db.cp_用户表中的一行。然后比较该行的用户名和密码属性,如果它们满足条件,则选中该行,以便表中需要存在这些列。这是对所有行执行的,它们作为IEnumerable返回,然后FirstOrDefault返回第一行或null。语法为=>的表达式是lambda表达式,类似于内联函数。你可以读到他们