【问题标题】:asp.net mvc LINQ datetime problemasp.net mvc LINQ日期时间问题
【发布时间】:2010-11-23 08:52:59
【问题描述】:
   string NewsFillter = string.Empty;
            List<string> PublishDatePostMeta = (from post in postrepository.GetAllPosts()
                              join pstmt in postrepository.GetAllPostMetas()
                              on post.int_PostId equals pstmt.int_PostId
                              where (post.int_PostTypeId == 4 && post.int_PostStatusId == 2 && post.int_OrganizationId == layoutrep.GetSidebarDetailById(SidebarDetailsId).int_OrganizationId) && pstmt.vcr_MetaKey=="Publish Date"
                              select pstmt.vcr_MetaValue).ToList();
            int DatesCount = PublishDatePostMeta.Count();           
            foreach (string PublishDate in PublishDatePostMeta)
            {
                if (PublishDate != "")
                {
                   NewsFillter += System.DateTime.Now + ">=" + Convert.ToDateTime(PublishDate);
                }
            }                            

            var postsidebar = from post in postrepository.GetAllPosts()
                              join pstmt in postrepository.GetAllPostMetas()
                              on post.int_PostId equals pstmt.int_PostId
                              where (post.int_PostTypeId == 4 && post.int_PostStatusId == 2 && post.int_OrganizationId == layoutrep.GetSidebarDetailById(SidebarDetailsId).int_OrganizationId)
                              && (pstmt.vcr_MetaKey.Contains(filter) && pstmt.vcr_MetaValue.Contains("true")) 
                              select post;

第一个问题。问题是 NewsFillter 在 true 之后如何在 pstmt 对象的后边栏查询中被容纳(我将把它放在包含、等于连接或什么中)。

第二个问题。有什么方法可以让一个块(在&&s之间)返回可枚举的,我可以摆脱这个。目前不允许这样做

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    我没有正确理解你,但如果你想应用多个过滤器,这是我的解决方案:

    //Book is a table in the database
    List<Expression<Func<Book, bool>>> filters = new List<Expression<Func<Book, bool>>>();
    IQueryable<Book> query = dc.Books;
    
    filters.Add(b => b.BookId == long.Parse(id));
    //apply all filters
    foreach (var f in filters)
        query = query.Where(f);
    

    您的问题:

    1. 这道题需要输入输出的例子。试试这样的:

      || pstmt.vcr_MetaKey=="Publish Date" && ( pstmt.vcr_MetaValue == "" || DateTime.Parse(pstmt.vcr_MetaValue) < DateTime.Now)

    2. 有方法 AsEnumerable,如果你的意思是我的想法。

    【讨论】:

    • 你很接近,我假设查询将有一个基于所有 f 的连接结果?
    • 好的,其次我可以制作一个字段独立变量过滤器,因为在我的情况下 bookId 将是行而不是列?这才是真正的问题
    • 我认为除了 Skip 和 Take 组合之外没有任何“非列过滤器”(它们是按行号过滤)。字段独立过滤器可以使用字符串查询来实现,例如在实体框架中:dc.SomeTable.Where("it.["+columnName+"] = '"+columnValue+"'");
    • 如果您想将过滤器连接为“OR”,而不是“AND”,您可以阅读此答案:stackoverflow.com/questions/569671/…。这是关于使用 Linq2Sql 进行动态查询的链接:west-wind.com/Weblog/posts/314663.aspx
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多