2012-11-18 68 views
1

我查詢使用LINQ到SQL數據庫。這裏是我的數據:LINQ到SQL查詢返回相同的記錄兩次

 Name  LastName  Age 
    ------------------------------ 
1 Abc   Def   15 
2 Abc   Def   17 
3 xyz   wss   17 

我的LINQ to SQL代碼:

Context _context = new Context("Conn_String"); 
var table = _context.GetTable<Person>(); 
List<Person> persons = table.Where<Person>(p => p.Name == "Abc" && p.LastName == "Def").ToList<Person>(); 

按照我的理解,這個查詢應該返回2個記錄。即記錄1和記錄2.但它將兩次返回記錄1。你可以啓發我,如果它是Linq中的Sql錯誤或我做錯了什麼?

編輯:

這是我的DAL代碼:

public List<T> GetList<T>(Expression<Func<T, bool>> predicate) where T : class 
{ 
    try 
    { 
      Context _context = new Context("Conn_String"); 
      var table = _context.GetTable<T>(); 
      return table.Where<T>(predicate).ToList<T>(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
} 

因爲我調用這個方法:

List<Person> person = DAL.GetList<Person>(p => p.Name == "Abc" && p.LastName == "Def"); 

foreach(var Person in persons) 
{ 
    // Print(person.Age); 
} 
+1

機會是有什麼毛病你診斷相匹配的值的第一行的實體鍵。請說明你如何確定相同的記錄被返回兩次。 –

+0

是的。我多年來在數據倉庫項目中廣泛使用LINQ(儘管不是SQL),並且從未見過這種情況。我將開始調試SQL級別 - 請參閱數據庫上生成的語句,然後通過在管理應用程序中運行它來查看SQL Server返回的結果。這是99.9%的錯誤診斷。 – TomTom

+0

返回的記錄顯示兩個記錄的Age = 15。 –

回答

1

嗨烏斯曼,

這是我的表:

enter image description here

這裏我使用下面的查詢:

using (DataClassesDataContext dc = new DataClassesDataContext()) 
     { 
      var v = (from c in dc.t_controls where (c.config_display == "SHOW_VA" && c.next_value == 1) select c.description).ToList(); 
     } 

此查詢返回的所有5 rows.Take它作爲參考,並檢查你錯在哪裏。希望它能幫助你。

+0

我不使用語法(從C在dc.t_controls).......我正在使用Context _context = new Context(「Conn_String」); var table = _context.GetTable (); return table。Where (predicate).ToList ();可能是因爲我面對這種行爲。 –

+0

可能是,但是您是否通過使用我的解決方案解決了您的問題? – Sunny

1

你可以運行你的查詢和個人資料它使用數據庫中的SQL Server分析器(假設SQL Server) SE。我想知道你的表中是否有重複的記錄..或者如果有一個連接導致重複。

我已經使用LINQ沒有問題的SQL。

如果數據庫配置文件出來正確的,你要「強制」是唯一的,你可以在你的LINQ查詢在最後總是通過一個獨特的方法。

4

我剛剛碰到這個問題我自己。 檢查其屬性模型推斷爲您的Person類的實體鍵。

如果有一個非唯一列,因爲它會使用哪個每一行使用ToList()轉換時