使用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 到实体