获取LINQ Select Query的结果并将其分配给字符串

时间:2013-08-30 09:01:08

标签: linq

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

我做错了什么?

2 个答案:

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