3

我正在使用 Linq to 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 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

4 回答 4

7

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

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

于 2013-10-31T02:16:52.183 回答
2

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

您可以简单地在视图选择语句中添加一个唯一的列。您不必在程序中使用该列,但它将允许 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--解决了-.html

于 2019-07-11T07:35:45.697 回答
1

嗨,乌斯曼,

这是我的桌子:

在此处输入图像描述

我在这里使用以下查询:

   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 行。将其作为参考并检查您的错误之处。希望对您有所帮助。

于 2012-11-19T05:29:25.943 回答
1

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

我使用 LINQ to SQL 没有任何问题。

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

于 2012-11-18T18:46:36.853 回答