2012-11-18 71 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()转换时