我写了这个小函数来通过ID获取用户电子邮件:
public string GetUserEmailByID(int UserID)
{
string email = "";
var query = (
from c in dbContext.Users
where (c.ID == UserID)
select new
{
email = c.Email,
}
);
return email;
// return query.ToString();
}
然后我为它编写了这个测试:
[Test]
public void ShouldGetUserEmailByUserIDVerifyItIsCorrect()
{
Assert.AreEqual("useremail@test.com", userRepository.GetUserEmailByID(4));
}
测试失败,因为它期待“useremail@test.com”但是是string.empty。
我做错了什么?
答案 0 :(得分:0)
您要返回的电子邮件变量是空字符串,而您需要IEnumerable<T>
查询中某个对象的属性。
您可以使用以下命令更改代码:
public string GetUserEmailByID(int UserID)
{
var query = (
from c in dbContext.Users
where (c.ID == UserID)
select c.Email
);
return query.FirstOrDefault();
}
这种方式查询将是IEnumerable<string>
,因此您只需要获取第一个元素,或者默认值不存在。
答案 1 :(得分:0)
var query = (
from c in dbContext.Users
where (c.ID == UserID)
select new
{
email = c.Email,
}
);
这只是一个查询声明,对于一个返回匿名类型对象列表的查询,只有一个名为email
的属性。 与您的email
本地变量无关。
更重要的是,你只是声明了查询定义,但根本不执行它!
请改为尝试:
public string GetUserEmailByID(int UserID)
{
return (from c in dbContext.Users
where (c.ID == UserID)
select c.Email).FirstOrDefault();
}