2011-07-13 69 views
0

我使用LINQ to SQL中的許多倍正常工作,但今天有些不對勁LINQ到SQL「選擇在哪裏」的問題(WPF C#4.0)

這是代碼,必須選擇從用戶表中的密碼。 我叫這個方法告訴賴特...結果不是密碼請看圖片。

public void GetPassword(int id) 
    { 
     using (HProDataContext db = new HProDataContext()) 
     { 
      _CurrentPassword = (from p in db.users 
            where p.id == _CurrentID 
            select p.password).ToString(); 
     } 
    } 

這個我如何使用此方法

private void btnOK_Click(object sender, RoutedEventArgs e) 
    { 
     if (listView1.SelectedItems.Count < 1) 
     { 
      MessageBox.Show("Please Select User"); 
     } 
     else if (listView1.SelectedItems.Count > 1) 
     { 
      MessageBox.Show("Please Select Only One User"); 
     } 
     else 
     { 
      _CurrentID = Convert.ToInt32(listView1.SelectedValue); 
      GetPassword(_CurrentID); 

      if (PasswordBox.Password == _CurrentPassword) 
      { 
       MessageBox.Show("You r in"); 
      } 
      else 
      { 
       //MessageBox.Show("Password Is incorrect, please try again"); 
       MessageBox.Show(_CurrentPassword); 
      } 

     } 

    } 

enter image description here

+0

「選擇p.password」 可能返回多個結果 - 你不能簡單地做一個的ToString()(見丹尼爾的回答) –

回答

4

你缺少一個SingleOrDefault呼叫或呼叫SingleFirstFirstOrDefault

_CurrentPassword = (from p in db.users 
        where p.id == _CurrentID 
        select p.password).Single().ToString(); 

說明:即使只有一個項目返回查詢返回的IEnumerable<string>。您首先需要獲得該物品,然後才能對ToString()進行明智的呼叫。順便說一句:我認爲ToString()是不需要的,因爲p.password已經應該是一個字符串。

+0

感謝我這樣的傻瓜。 :(謝謝 –

+0

再次感謝.... –

2

它看起來像你的LINQ表達,不是密碼做ToString()。您能否嘗試在GetPassword中刪除.ToString()

另外,正如別人指出的那樣,您需要從enumerable中選擇一個值 - SingleOrDefault()應該這樣做。

1

的表達式的結果:

from p in db.users 
    where p.id == _CurrentID 
    select p.password 

IQueryable<string>,不string(假設p.passwordstring)。使用.First()或其他方法只從可查詢集合中選擇一個元素。

1

你在做什麼是轉換什麼是LINQ查詢裏面一個字符串,該query.You沒有結果可以

嘗試

_CurrentPassword = (from p in db.users 
        where p.id == _CurrentID 
        select p.password).FirstOrDefault().ToString(); 

_CurrentPassword = (from p in db.users 
        where p.id == _CurrentID 
        select p.password).SingleOrDefault().ToString(); 

請參考這些問題和回答,以便在Single()SingleOrDefault(),First(),FirstOrDefault()之間選擇。

When to use .First and when to use .FirstOrDefault with LINQ?

LINQ: When to use SingleOrDefault vs. FirstOrDefault() with filtering criteria