2010-11-22 6 views
0
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")  
     && (System.DateTime.Now >= 
      Convert.ToDateTime(pstmt.Post.PostMetas.FirstOrDefault(m => 
       m.vcr_MetaKey == "Publish Date").vcr_MetaValue))) 
    select post; 

Comment puis-je vérifier vide dans cette partie Date (il est d'erreur donne)asp.net contrôle mvc datettime LINQ pour vide

&& (System.DateTime.Now >= Convert.ToDateTime(pstmt.Post.PostMetas.FirstOrDefault(m => 
    m.vcr_MetaKey == "Publish Date").vcr_MetaValue))) 
+0

Ce qui est l'erreur? FirstOrDefault() n'en donne pas? – danijels

Répondre

1

Vous pouvez essayer éliminé la possibilité d'un vide valeur d'abord, puis essayez votre casting après.

&& pstmt.Post.PostMetas.FirstOrDefault(m => 
    m.vcr_MetaKey == "Publish Date" 
    && !string.IsNullOrEmpty(m.vcr_MetaValue)) 
&& (System.DateTime.Now >= 
     Convert.ToDateTime(pstmt.Post.PostMetas.FirstOrDefault(m => 
      m.vcr_MetaKey == "Publish Date").vcr_MetaValue))) 
+0

j'ai été réussie avec null – maztt

0

Essayez ceci:

// declare the action for re-use 
Func<PostMeta,bool> action = m => m.vcr_MetaKey == "Publish Date"; 

// then test for Any() before comparing anything 
&& (pstmt.Post.PostMetas.Any(action) && System.DateTime.Now >= Convert.ToDateTime(pstmt.Post.PostMetas.First(action).vcr_MetaValue)))