使用Linq的情况

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Linq的情况相关的知识,希望对你有一定的参考价值。

我在数据库中有一个表格

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是否已经存在然后我想要检索该行,如果电子邮件不存在那么我必须检查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");
}

以上是关于使用Linq的情况的主要内容,如果未能解决你的问题,请参考以下文章

错误 3002:映射片段中的问题 | c# linq 到实体

在 Linq 中,如何在不使用 Count(predicate) 的情况下查找集合是不是包含元素?

Linq 在哪里有奇怪的情况

处理屏幕旋转上的片段重复(带有示例代码)

创建自己的代码片段(CodeSnippet)

JavaScript 代码片段