使用 Linq 的 Where 条件
Where condition using Linq
我在数据库中有一个 table 作为
Code No Email Pwd
-----------------------------------------------------------
ABCDEFG 1 aaa@gmail.com 1
EYETW 2 bbb@gmail.com 2
WDHH0 3 NULL NULL
DZDX220 4 NULL NULL
AL7F0MI 5 NULL NULL
Q5D6M4R 6 NULL NULL
现在,在这个 table 中,我必须检查用户使用的 email
是否已经存在,然后我想检索该行,如果电子邮件不存在,那么我必须检查 Pwd
是否已被使用并检索行数据。
我试过了
var data = (from table in ds.Tables[0].AsEnumerable()
where table.Field<Int16>("Pwd") == Convert.ToInt16(pwd) || table.Field<string>("Email") != email
select new {emailAddress = table.Field<string>("email") , passsword = table.Field<Int16>("Pwd") }).FirstOrDefault();
但它没有返回正确的答案。
测试用例:
如果我传递 aaa@gmail.com 和 2 那么我必须检索 `aaa@gmail.com 1 .
如果我传递 bbb@gmail.com 和 1 那么我想检索 bbb@gmail.com 2 or null
.
对不起各位,如果它们存在的话,我想检索这些值而不是空值
您需要更新您的 Where()。它应该是这样的:
var data = (from table in ds.Tables[0].AsEnumerable()
where (table.Field<string>("Email") == email) //email exists
|| (table.Field<string>("Email") != email && table.Field<Int16>("Pwd") == Convert.ToInt16(pwd)) //email doesn't exist, but password does
select new {emailAddress = table.Field<string>("email") , passsword = table.Field<Int16>("Pwd") }).FirstOrDefault();
正如 Yacoub 在评论中指出的那样,table.Field<string>("Email") == email
的问题应该是 == email
.
var matchingrow = ds.Tables[0].AsEnumerable()
.FirstOrDefault(table=> table.Field<Int16>("Pwd") == Convert.ToInt16(pwd)
|| table.Field<string>("Email") == email);
if(matchingrow != null)
{
// matching email/pwd. logic goes here
// matchingrow.Field<string>("Email");
}
我在数据库中有一个 table 作为
Code No Email Pwd
-----------------------------------------------------------
ABCDEFG 1 aaa@gmail.com 1
EYETW 2 bbb@gmail.com 2
WDHH0 3 NULL NULL
DZDX220 4 NULL NULL
AL7F0MI 5 NULL NULL
Q5D6M4R 6 NULL NULL
现在,在这个 table 中,我必须检查用户使用的 email
是否已经存在,然后我想检索该行,如果电子邮件不存在,那么我必须检查 Pwd
是否已被使用并检索行数据。
我试过了
var data = (from table in ds.Tables[0].AsEnumerable()
where table.Field<Int16>("Pwd") == Convert.ToInt16(pwd) || table.Field<string>("Email") != email
select new {emailAddress = table.Field<string>("email") , passsword = table.Field<Int16>("Pwd") }).FirstOrDefault();
但它没有返回正确的答案。
测试用例:
如果我传递 aaa@gmail.com 和 2 那么我必须检索 `aaa@gmail.com 1 .
如果我传递 bbb@gmail.com 和 1 那么我想检索 bbb@gmail.com 2 or null
.
对不起各位,如果它们存在的话,我想检索这些值而不是空值
您需要更新您的 Where()。它应该是这样的:
var data = (from table in ds.Tables[0].AsEnumerable()
where (table.Field<string>("Email") == email) //email exists
|| (table.Field<string>("Email") != email && table.Field<Int16>("Pwd") == Convert.ToInt16(pwd)) //email doesn't exist, but password does
select new {emailAddress = table.Field<string>("email") , passsword = table.Field<Int16>("Pwd") }).FirstOrDefault();
正如 Yacoub 在评论中指出的那样,table.Field<string>("Email") == email
的问题应该是 == email
.
var matchingrow = ds.Tables[0].AsEnumerable()
.FirstOrDefault(table=> table.Field<Int16>("Pwd") == Convert.ToInt16(pwd)
|| table.Field<string>("Email") == email);
if(matchingrow != null)
{
// matching email/pwd. logic goes here
// matchingrow.Field<string>("Email");
}