Linq to Sql Query两次返回相同的记录

时间:2012-11-18 08:25:02

标签: c# asp.net .net database linq-to-sql

我使用Linq to Sql查询数据库。这是我的数据:

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

我的Linq to Sql Code是:

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 to 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);
}

4 个答案:

答案 0 :(得分:6)

我自己也遇到过这个问题。 检查模型推断出哪个属性是Person类的实体键。

如果它有一个非唯一列作为实体键,它将使用与使用ToList()转换时每行匹配的第一行

答案 1 :(得分:1)

您可以运行查询并使用数据库中的SQL Server探查器(假设SQL Server)对其进行概要分析。我想知道你的表中是否有重复记录..或者如果有连接导致重复。

我使用LINQ to SQL没有问题。

如果数据库配置文件正确并且您希望“强制它”为唯一,那么您最终可以在LINQ查询中传递一个不同的方法。

答案 2 :(得分:1)

嗨Usman,

这是我的表:

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行。将其作为参考并检查你错在哪里。希望它可以帮到你。

答案 3 :(得分:1)

简短的答案,您需要在获取的数据中添加主键。

您可以简单地将一列添加到视图选择语句中,这是唯一的。您不必在程序中使用该列,但是它将使EF能够为您正确构建每个对象。

尽管这个问题是在2012年11月提出的,而我是在2019年7月回答的。但是详细的答案可以从以下来源获得。 我正在回答,也许这可能会帮助某个人。

.NET中的LINQ从有效的SQL视图返回重复的行 https://www.itworld.com/article/2833108/linq-in--net-returning-duplicate-rows-from-a-working-sql-view--solved-.html