繁体   English   中英

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

[英]Linq to Sql Query returning same record twice

我正在使用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);
}

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

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

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

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

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

我使用LINQ to SQL没问题。

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

嗨,乌斯曼,

这是我的桌子:

在此处输入图片说明

在这里我正在使用以下查询:

   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行,以其为参考并检查您在哪里出错,希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM