Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么LINQ OrderByDescending不能处理由两个表之间的并集组成的视图?_C#_Sql_Sql Server_Linq_Devforce - Fatal编程技术网

C# 为什么LINQ OrderByDescending不能处理由两个表之间的并集组成的视图?

C# 为什么LINQ OrderByDescending不能处理由两个表之间的并集组成的视图?,c#,sql,sql-server,linq,devforce,C#,Sql,Sql Server,Linq,Devforce,我的SQL Server数据库中有一个视图,它是两个表的联合体。当我从视图中检索特定成员的所有行时,这是我的调用 public IEnumerable<MemberTransaction> GetMemberTransactions(string socSecNo) { var query = Manager.MemberTransactions .Where(m => m.SocSecNo == socSecNo) .Order

我的SQL Server数据库中有一个视图,它是两个表的联合体。当我从视图中检索特定成员的所有行时,这是我的调用

 public IEnumerable<MemberTransaction> GetMemberTransactions(string socSecNo)
 {
     var query = Manager.MemberTransactions
         .Where(m => m.SocSecNo == socSecNo)
        .OrderByDescending(m => m.TranDate);

     var results = query.Execute();

     return results;
 }
public IEnumerable GetMemberTransactions(字符串socSecNo)
{
var query=Manager.MemberTransactions
.其中(m=>m.SocSecNo==SocSecNo)
.OrderByDescending(m=>m.TranDate);
var results=query.Execute();
返回结果;
}
我从代码中调用Get方法,并将返回的集合分配给网格的datasource属性。这些行不会按照Get方法中的order by语句显示。它们以随机顺序显示

我必须这样做才能正确显示行

    IEnumerable<MemberTransaction> transactions = FetchMemberTransactions(currentMember.SocSecNo);
    MemberTransactionBS.DataSource = transactions.OrderByDescending(t => t.TranDate);
    MemberTransactionsGrid.Refresh();

    public IEnumerable<MemberTransaction> FetchMemberTransactions(string socSecNo)
    {
         var transactions = Repository.GetMemberTransactions(socSecNo);
         return transactions;
    }
IEnumerable transactions=FetchMemberTransactions(currentMember.SocSecNo);
MemberTransactionBS.DataSource=transactions.OrderByDescending(t=>t.TranDate);
MemberTransactionGrid.Refresh();
公共IEnumerable FetchMemberTransactions(字符串socSecNo)
{
var transactions=Repository.GetMemberTransactions(socSecNo);
退货交易;
}

从联合返回行是否有问题?为什么按降序排序的
没有按预期工作?

你说第一种方法不起作用,但它对我起作用了!所以请试试第二条路

    // First Way
    public List<MemberTransaction> GetMemberTransactions(string socSecNo)
    {
        var orderedListOfData = Manager.MemberTransactions
                                .Where(m => m.SocSecNo == socSecNo)
                                .OrderByDescending(m => m.TranDate).ToList();
        return orderedListOfData;
    }



     // Second Way
     public List<MemberTransaction> GetMemberTransactions(string socSecNo)
     {
         var orderedListOfData = (from m in Manager.MemberTransactions
                                  where m.SocSecNo == socSecNo
                                  orderby m.TranDate descending
                                  select m).ToList();
         return orderedListOfData;
      }
//第一条路
公共列表GetMemberTransactions(字符串socSecNo)
{
var orderedListOfData=Manager.MemberTransactions
.其中(m=>m.SocSecNo==SocSecNo)
.OrderByDescending(m=>m.TranDate).ToList();
返回orderedListOfData;
}
//第二条路
公共列表GetMemberTransactions(字符串socSecNo)
{
var orderedListOfData=(来自Manager.MemberTransactions中的m
其中m.SocSecNo==SocSecNo
orderby m.TranDate降序
选择m.ToList();
返回orderedListOfData;
}

如果订单是从数据库正确返回的(像其他答案一样首先测试),请尝试返回
IORDerenumerable
而不是
IEnumerable

transactions
是否按您预期的顺序订购?正如Carth所建议的,第一步是确定订购失败的确切位置。它是以错误的顺序从数据库返回的(在
GetMemberTransactions
中通过断点测试并查看数据)还是其他地方?您提供的代码实际上不需要额外的顺序,所以我假设这是代码的精简版本?在
query.Execute()
和您最后使用它之间,您肯定没有其他操作作用于您的结果吗?请记住,我怀疑许多linq操作不能保证维护顺序(我可能错了)。我检查了GetMemberTransactions中返回的行,但它们没有顺序。我没有其他代码。如果没有额外的orderby语句,我无法对网格中的数据进行排序。我只是尝试了这个方法,但行仍然不能按orderby降序返回。老板,如果数据库中有数据,不可能不返回某些内容:)当您逐行调试代码时,以及当调试器通过“查询”时,该怎么办线路?它没有返回任何内容吗?是的,它返回该成员的正确行数,在本例中为576行。但是正如我所说的,这些行不是按照orderby子句排序的,它们是随机排序的。啊哈!所以你的“TranDate”一定有问题!请原谅我问了这个愚蠢的问题,但是你确实确定你的传输数据正确下降了吗?如果是,lemme有它的格式吗?如果使用order by trandate desc在sql server中运行查询,则显示的输出顺序正确。因此,组成视图和联合的sql语句是正确的。问题是linq无法正确排序联合视图。我使用IOrderedEnumerable保存返回的集合,但数据的顺序仍然不正确。然后尝试启动Sql Server探查器,检查代码生成的查询是否正确。好的,我这样做了,下面是发送的Sql语句到数据库抱歉,它不会让我显示它,因为它太长了,但正在发送一个按传输日期降序的订单