C# C/Entity框架中的LINQ表达式
我是C、实体框架和Linq的新手,希望有人能解释一下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
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表达式,类似于内联函数。你可以读到他们