【问题标题】:Linq OrderBy (or something like it) with IQueryable带有 IQueryable 的 Linq OrderBy(或类似的东西)
【发布时间】:2021-07-28 15:21:21
【问题描述】:

我似乎找不到使用过滤器对数据库进行排序的解决方案。当我返回提交时,它会在过滤掉之前返回数据库。因此,与过滤数据库的 var submits = Biz.Data.AllItems.LoadNotDeleted() 行不同,返回提交只返回整个结果。我尝试了不同版本的 return submits = submits.(something) 来过滤列表,但我没有得到任何可用的选项。

public IQueryable<Biz.Data.AllItems> items_GetData()
{
   var submissions = Biz.Data.AllItems.LoadNotDeleted().Where(x => 
   x.itemOne != null && 
   x.itemTwo != null && 
   x.itemThree != null));
   var filter = new Biz.Data.AllItemsFilter();

        var fileType = ddlFileType.SelectedValue;
        var session = ddlSession.SelectedValue;


        filter.IsDeleted = false;
        filter.IsCancelled = false;
        filter.IsAbstractSubmission = true;

        switch (fileType)
        {
            case "Abstract":
                filter.FilterExpression = x => x.AbstractUserUploadId.HasValue;
                break;
            case "Poster":
                filter.FilterExpression = x => x.PosterUserUploadId.HasValue;
                break;
            case "Audio":
                filter.FilterExpression = x => x.AudioUserUploadId.HasValue;
                break;
            case "Transcript":
                filter.FilterExpression = x => x.TranscriptUserUploadId.HasValue;
                break;
            default:
                break;
        }

        if (session != "All")
        {
            filter.AbstractTopic.MatchType = Dms.Framework.EntityFramework.Match.Exact;
            filter.AbstractTopic.Value = session;
        }
   return submissions = Biz.Data.AllItems.Load(filter).OrderBy(x => x.LastName).ThenBy(x => x.FirstName);
}

LoadNotDeleted =

    public static DbQuery<Registration> LoadNotDeleted()
    {
        var filter = new RegistrationFilter();
        filter.IsDeleted = false;
        return Load(filter, Int32.MaxValue, 0, ConferenceEventsEntities.Current);
    }

加载 =

    public static DbQuery<Registration> Load(RegistrationFilter filter)
    {
        return Load(filter, Int32.MaxValue, 0, ConferenceEventsEntities.Current);
    }

【问题讨论】:

  • 是的,措辞不好,不是数据库表的列表
  • 我已经添加了
  • 解释为什么你得到错误的提交:string GetFoo(){ string foo = "foo"; return foo = "bah"; } 结果将是“bah”,因为你将它分配给变量,所以第一个分配不会在任何地方使用。

标签: asp.net linq


【解决方案1】:

在我看来,您的问题可以通过完全删除那些“AllData”部分来解决:

var submissions = Biz.Data
                     .AllItems
                     .LoadNotDeleted()
                     .Where(x => x.itemOne != null && x.itemTwo != null && x.itemThree != null)
                     .OrderBy(x => x.LastName)
                     .ThenBy(x => x.FirstName);

return submissions;

如果这不是你的意思,你需要详细说明。

【讨论】:

  • 有一个var过滤器需要添加到基于用户过滤器的过滤器
  • 它是什么类型的?我可以看到它的名称是“AllItemsFilter”,但这没有意义,因为它不会过滤任何东西......
  • 那么“LoadNotDeleted”和“Load(filter)”方法有什么作用呢?
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2014-08-30
  • 2010-10-26
  • 1970-01-01
相关资源
最近更新 更多