sql视图通过join

时间:2016-04-22 17:13:45

标签: sql asp.net-mvc join view

我遇到了一个奇怪的问题。我有一个按实体框架的网格馈送,网格结果取自sql视图。它的代码首先是view的实体映射到实际的sql视图:

public class MyMap : EntityTypeConfiguration<MyViewEntity>
{
    public MyMap()
    {
        ToTable("vw_MyView");
        HasKey(v => v.OrderID);
    }
}

我在sql中的视图有连接,这是由EF生成的简化查询,注释掉来自连接的字段:

SELECT 
    [Extent1].[a] AS [a], 
    [Extent1].[b] AS [b], 
    [Extent1].[c] AS [c], 
    --[Extent1].[SenderCountry] AS [SenderCountry], 
    --[Extent1].[SenderCode] AS [SenderCode], 
    [Extent1].[d] AS [d], 
    [Extent1].[e] AS [e], 
    [Extent1].[f] AS [f], 
    --[Extent1].[Occasion] AS [Occasion], 
    [Extent1].[g] AS [g], 
    [Extent1].[h] AS [h]
    FROM [dbo].[vw_MyView] AS [Extent1]
    WHERE [Extent1].[Receiver] = xxx
    order by extent1.[date] DESC
    OFFSET 40 ROWS FETCH NEXT 10 ROWS ONLY 

此代码生成此类结果(字段)

119900
119934
119943
119948
119949
119968
120004
120020
120030
120057

现在让我们再次将senderCode字段放入查询中。 SenderCode来自表成员,它在Member.ID = mainTable.c上加入到我们的主表(这是来自b c d ..字段),结果是:

120117
119943
119934
119948
119949
120120
120121
120122
120030
120057
119900从结果中消失,120117跳到它的位置。所有输出记录都有d字段,每个记录的值为2,除了记录119900有3。 在第二个结果中,所有记录在字段d中都有2个。字段d未在任何join或where子句中使用。 谁能告诉我这里发生了什么?从连接表中选择字段时,为什么连接行为如此不同?它会为每个偏移产生差异。

谢谢!

0 个答案:

没有答案