C# 列表从数据库中检索元组只返回第一个可用的元组

标签 c# sql sql-server linq

我正在使用此查询和列表从 MSSQL 数据库中检索元组:

string query3 = @"select * from HistoryMessageValues where IdMessage in (select id from HistoryMessages where IDDevice in ("+listIDs+")) and (DtRicezione between '" + fromdate.ToString("yyyy-dd-MM") + "' and '" + todate.ToString("yyyy-dd-MM") + "')";
List<HistoryMessageValues> totalm= dbMngr.Set<HistoryMessageValues>().FromSql(query3).ToList();
List<HistoryMessageValues> outdoor = totalm.Where(x => x.IdDataModelField==Guid.Parse("9f5d1fe3-27d7-44ee-bea4-02b36897f9af")).ToList(); 

明确写的查询是这样的:

select * from HistoryMessageValues where IdMessage in (select id from HistoryMessages where IDDevice in ('7b6d6ca2-4d87-4334-9477-d96925d992c4' )) and (DtRicezione between '2010-01-01' and '2019-01-08')
and IdDataModelField='9f5d1fe3-27d7-44ee-bea4-02b36897f9af'

如果我直接对数据库执行查询本身,我将获得这些元组:

Tuples obtained through query execution

如您所见,属性“value”和“DtRicezione”在元组上是不同的(至少,其中的大部分)。

与此同时,我只获得了复制数百个的第一个元组。

确实,在我的后端执行了 3 行 C# 之后,执行了以下循环:

List<HistoryMessageValues> outdoor = totalm.Where(x => x.IdDataModelField==Guid.Parse("9f5d1fe3-27d7-44ee-bea4-02b36897f9af")).ToList(); 
for (int i=0;  i<outdoor.Count(); i++)
{
    Console.WriteLine(outdoor.ElementAt(i).value + " " + outdoor.ElementAt(i).DtRicezione + " " + outdoor.ElementAt(i).IdDataModelField);
}

结果是这样的:

Result after iteraion

正如您可以比较两个图像一样,这将是数据库表中可用的第一个元组。

表的脚本创建:

    SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[HistoryMessageValues](
    [id] [bigint] NOT NULL,
    [IdDataModelField] [uniqueidentifier] NOT NULL,
    [value] [nvarchar](50) NOT NULL,
    [IdMessage] [bigint] NOT NULL,
    [DtRicezione] [datetime] NULL,
    [idKey] [uniqueidentifier] NULL
) ON [PRIMARY]
GO

最佳答案

Istorn!

尝试使用 foreach 而不是您的 for...

outdoor.ForEach( x => Console.WriteLine(x.value + " " + x.DtRicezione + " " + x.IdDataModelField));

尝试检查查询执行器中的数据读取器。 也许它不会进入下一行(因此您的列表每次都会收到来自数据库的同一行)。

关于C# 列表从数据库中检索元组只返回第一个可用的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890288/

相关文章:

sql - 浏览文件表目录已禁用

sql-server - 像 SQL Server 一样的 Postgres dllimport

sql - 针对日期范围的条件的查询性能

Java setString() 找不到?

c# - 检查 SELECT 语句条件是否为真

C#如何输出类(结构)中的所有项目

c# - ASP.Net 自托管 web api。验证 ajax 请求,cookie 未设置

c# - 如何构建程序集并保存它..?

c# - 自定义 DataContractSerializer

SQL:选择唯一的行