c# - 在 JSON 中获取相同值的多条记录
问题描述
我正在努力WEB API
。我创建了一个api
给我详细信息的。细节应该在nth
间隔之后。下面是我的代码。
var mainDetails = kesc.tj_xhqd.Where(m => (m.zdjh == msn) && (m.sjsj >= dt)).AsEnumerable()
.Select((x, i) => new { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })
.Where(x => x.i % interval == 0)
.ToList();
return Request.CreateResponse(HttpStatusCode.OK, new { details = mainDetails });
输出是
{
"details": [
{
"MSN": "002999001180",
"PingDateTime": "2018-05-16T18:39:52",
"PingValue": "19",
"i": 0
},
{
"MSN": "002999001180",
"PingDateTime": "2018-05-16T18:39:52",
"PingValue": "19",
"i": 24
},
{
"MSN": "002999001180",
"PingDateTime": "2018-05-16T18:39:52",
"PingValue": "19",
"i": 48
},
{
"MSN": "002999001180",
"PingDateTime": "2018-05-16T18:39:52",
"PingValue": "19",
"i": 72
},
{
"MSN": "002999001180",
"PingDateTime": "2018-05-16T18:39:52",
"PingValue": "19",
"i": 96
},
.
.
.
.
.
{
"MSN": "002999001180",
"PingDateTime": "2018-05-16T18:39:52",
"PingValue": "19",
"i": 144
},
]
}
该i
值会增加,但其他细节会一次又一次地重复。实际上,ping 值每 2 分钟出现一次,ping 值可以相同但日期时间不同。
更新 1
下面是我直接从数据库中获取的表的快照
从上图可以清楚地看出,只有ping值即19重复了几次,但日期时间只有一个,但日期时间2018-05-16T18:39:52
还是显示了多次
更新 2
这是我的数据库上下文,它将实现我的模型
public partial class kescEntities : DbContext
{
public kescEntities()
: base("name=kescEntities")
{
this.SetCommandTimeOut(10000);
}
public void SetCommandTimeOut(int Timeout)
{
var objectContext = (this as IObjectContextAdapter).ObjectContext;
objectContext.CommandTimeout = Timeout;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<tj_xhqd> tj_xhqd { get; set; }
}
如何设置我的查询,以便在间隔后获取所有不同的记录?
任何帮助将不胜感激。
解决方案
我试过你的代码。似乎按预期工作。看来您的问题在于数据本身。您是否检查过存储数据的逻辑?如果您的数据中有重复项,自然会检索到重复项。
编辑: 我认为存储数据部分的问题存在误解。我问的不是你在数据库中的存储方式,而是你如何持久化数据。您如何持久化数据或持久化数据是如何存储的?在您到达此之前是否有任何获取逻辑:
var mainDetails = kesc.tj_xhqd <---这家伙
我测试您的代码的部分:
class Program
{
static void Main(string[] args)
{
Random r = new Random();
List<Chingamajig> chinga = new List<Chingamajig>();
string[] verylongnum = new string[] { "00000000002312312", "34234002342342" };
int[] somenum = new int[] { 7, 14, 12, 28 };
for(int i = 0;i<100;i++)
{
Chingamajig c = new Chingamajig();
c.VeryLongNumbers = verylongnum[r.Next(0, 2)];
c.DateValue = DateTime.Now.AddMinutes((double)r.Next(-100, 101));
c.SomeNumber = somenum[r.Next(0, 4)];
chinga.Add(c);
}
foreach (Chingamajig c in chinga.OrderBy(x => x.VeryLongNumbers).ThenBy(y => y.DateValue).ThenBy(z => z.SomeNumber))
{
Console.WriteLine("{0} : {1} : {2}", c.VeryLongNumbers, c.DateValue, c.SomeNumber);
}
var m = "00000000002312312";
var dt = DateTime.Now.Date;
var interval = 2;
var ee = chinga.Where(x => (x.VeryLongNumbers == m) && (x.DateValue >= dt)).AsEnumerable()
.Select((z, i) => new { MSN = z.VeryLongNumbers, PingDT = z.DateValue, PingV = z.SomeNumber, i = i })
.Where(x => x.i % interval == 0).ToList();
Console.Clear();
foreach(var n in ee)
{
Console.WriteLine("{0} : {1} : {2} : {3}", n.MSN, n.PingDT, n.PingV, n.i);
}
Console.ReadLine();
}
}
public class Chingamajig
{
public string VeryLongNumbers { get; set; }
public DateTime DateValue { get; set; }
public int SomeNumber { get; set; }
}
所以是的.. 我确实用模拟数据测试了你的代码,因为你的示例代码里面没有什么肉。
更新: 尝试将此添加到您的代码中
var mainDetails = kesc.tj_xhqd
//This line
.AsNoTracking()
.Where(m => (m.zdjh == msn) && (m.sjsj >= dt))
.AsEnumerable()
.Select((x, i) => new { MSN = x.zdjh, PingDateTime = x.sjsj, PingValue = x.xhqd, i = i })
.Where(x => x.i % interval == 0)
.ToList();
不确定,但这个问题似乎源于没有 pkey 的表。虽然不确定您的情况,但以下是您参考的链接 Identical Rows
推荐阅读
- laravel - 有没有办法在没有数据的情况下返回 0 几个月?
- mongodb - Mongo Spring JPA 在 findAll() 调用中给出 IndexOutOfBoundsException
- python - Python 库安装但无法导入
- javascript - 鼠标悬停时如何获取DOM列表?
- php - 在 Powershell 中运行 PHP 脚本会一直打开 NotePad++ 而不是执行 PHP 脚本
- python - NameError:未定义名称“驱动程序”
- docker - Docker - 数据库容器的最佳实践?
- postgresql - Hibernate:如何自动生成 36 个基本字符串的 id
- c++ - 为什么Mat类的两个对象可以在不重载运算符+的情况下相加?
- javascript - 在 webpack 中使用模板字符串 [Javascript]