我有一个SQL视图,它产生一个包含8列的响应。这是一个相当复杂的工作,因此我不会在这里列出它,也不会增加我要理解的问题。
当我直接使用此查询在SQL Manager中查询视图时
SELECT * FROM [GPPS].[dbo].[PartIndex]
WHERE CategoryNameId = 182 AND CycleId = 13 AND BasketId = 304 AND MarketId = 8
ORDER BY ProductNameId
我得到了预期的结果(前两行很重要),并且ProductNameId列在结果中排在第七位
vvvvv
=====
218 13 8 304 182 124 32575 162.84
218 13 8 304 182 124 32576 184.08
218 13 8 304 182 125 32577 156.13
218 13 8 304 182 127 32578 605.84
218 13 8 304 182 130 32579 141.51
当我对视图执行以下LINQ时
PartIndexes.Where(x => x.CategoryNameId == 182
&& x.CycleId == 13
&& x.BasketId == 304
&& x.MarketId == 8)
.ToList()
.OrderBy(x => x.ProductNameId);
我实际上得到的是:
vvvvv
=====
218 13 8 304 182 124 32576 184.08
218 13 8 304 182 124 32576 184.08
218 13 8 304 182 125 32577 156.13
218 13 8 304 182 127 32578 605.84
218 13 8 304 182 130 32579 141.51
如您所见,前两个条目相同,并且ID的区别(32575和32576)已经丢失。
在视图上运行LINQ查询时查看SQL事件探查器将产生以下SQL
SELECT
[Extent1].[SetNameId] AS [SetNameId],
[Extent1].[CycleId] AS [CycleId],
[Extent1].[MarketId] AS [MarketId],
[Extent1].[BasketId] AS [BasketId],
[Extent1].[CategoryNameId] AS [CategoryNameId],
[Extent1].[ProductNameId] AS [ProductNameId],
[Extent1].[PartId] AS [PartId],
[Extent1].[Total] AS [Total]
FROM (SELECT
[PartIndex].[SetNameId] AS [SetNameId],
[PartIndex].[CycleId] AS [CycleId],
[PartIndex].[MarketId] AS [MarketId],
[PartIndex].[BasketId] AS [BasketId],
[PartIndex].[CategoryNameId] AS [CategoryNameId],
[PartIndex].[ProductNameId] AS [ProductNameId],
[PartIndex].[PartId] AS [PartId],
[PartIndex].[Total] AS [Total]
FROM [dbo].[PartIndex] AS [PartIndex]) AS [Extent1]
WHERE (182 = [Extent1].[CategoryNameId]) AND (13 = [Extent1].[CycleId]) AND (304 = [Extent1].[BasketId]) AND (8 = [Extent1].[MarketId])
当我直接在SQL管理器中执行该命令时,将得到以下期望的结果:
218 13 8 304 182 124 32575 162.84
218 13 8 304 182 124 32576 184.08
218 13 8 304 182 125 32577 156.13
218 13 8 304 182 127 32578 605.84
218 13 8 304 182 130 32579 141.51
任何人都知道这里可能发生什么,为什么执行LINQ请求返回的结果与SQL中的结果不同,但是当执行LINQ查询生成的SQL时,它返回期望的结果?
直接使用时,LINQ无法正常使用时,SQL会直接使用SQL做些什么?
实际上,来自@stanke的问题使我有了一个主意。
实际上,我稍稍更改了视图以包括另一列,以便可以唯一地标识每个记录。
我实际上不需要结果表中的column值,但它确实有助于LINQ在查询时保持记录唯一。看起来SQL本身可以很好地完成此任务,但是LINQ需要一些帮助来保持记录的清晰。
现在,它可以在SQL和LINQ中按预期工作
在一条数字线上有n个位于不同位置的信标。第i个信标具有位置Ai和功率电平Bi。当第i个信标被激活时,它摧毁其左侧(坐标递减方向)距离bi(含)内的所有信标。然而,信标本身并没有被摧毁。埼玉县将从右至左一个一个地启动信标。如果一个信标被破坏,它就不能被激活。 埼玉希望Genos在所有现有信标的右边严格地添加一个信标,具有任何位置和任何功率等级,这样尽可能少的信标被破坏。注意,Genos放置的信标意味
问题内容: 我试图以与从中选择类似的方式选择的列名称。 我似乎找不到解决办法。有没有其他人以前做过此事,或者知道是否有可能? 问题答案: information_schema.columns.Table_name(至少在Sql Server 2000下)包含视图,因此只需使用
问题内容: 我有一些LINQ to SQL,有时会抛出一个 “无法在具有唯一索引’IX_Indexname’的对象’dbo.Table’中插入重复的键行。该语句已终止。” 有什么办法可以打开日志记录或至少调试到datacontext中,以查看在引发错误时正在执行什么sql? 更新: 我应该提一下我对方法的了解,我想知道在DataContext上是否有一个属性,该属性可以显示最后执行的SQL,或者在
问题内容: 以下脚本应返回部门的名称以及这些部门中的雇员人数,市场营销,执行和销售部门的雇员为‘0’,但返回的值为‘1’,而不是‘0’。我该如何纠正? 问题答案: 不要使用数数您想数数的员工。 计算整行。由于在进行计数(*)时,部门中每个部门始终至少会有一个记录,因此您总是会获得至少1条记录 演示
我正在尝试使用spark sql运行一个基本的java程序 如果有人能给我指出一些在斯巴克-sql(斯巴克-2.1.1)上可以阅读的好材料,那也太好了。我计划使用火花来实现ETL,连接到MySQL和其他数据源。 异常在线程"main"org.apache.spark.sql.分析异常:未找到表或视图:;第1行pos 21;
我用vscode写了一个java程序。但是我在java输出中得到了意想不到的答案。通常这个sout应该是6.6,但是java说6.6000000000000005。为什么