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>クエリ内のオブジェクトの 1 つのプロパティが必要です。次の方法でコードを変更できます。

public string GetUserEmailByID(int UserID)
{
    var query = (
             from c in dbContext.Users
             where (c.ID == UserID)
             select c.Email
         );
    return query.FirstOrDefault();
}

このようにクエリは になる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,
         }
     );

これは、 という名前のプロパティを 1 つだけ持つ匿名型オブジェクトのリストを返すクエリの単なるクエリ宣言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 に答える