使用Linq的情况

时间:2016-04-16 12:27:11

标签: c# linq linq-to-sql

我在数据库中有一个表

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

现在,在此表中,我必须检查用户使用的email是否已经存在,然后我想要检索该行,如果电子邮件不存在,那么我必须检查{是​​否{ {1}}已被使用并检索行数据。

我试过这个

Pwd

但它没有回复正确的答案。

测试用例

如果我通过aaa@gmail.com和2,那么我必须检索`aaa@gmail.com 1。

如果我通过bbb@gmail.com和1,那么我想要检索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();

很抱歉,如果其中任何一个存在,我想检索这些值但不是空值

2 个答案:

答案 0 :(得分:0)

您需要更新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();

答案 1 :(得分:0)

正如 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");
}