0

我编写了这个小函数来通过 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。

我究竟做错了什么?

4

2 回答 2

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();
}

这样查询将是 a IEnumerable<string>,因此您只需要获取第一个元素,或者没有默认元素。

于 2013-08-30T09:04:41.893 回答
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();
}
于 2013-08-30T09:08:28.107 回答