سؤال

لقد كنت أبحث في جعل أكثر عمومية WHERE جملة لذلك لا أكرر الكود.لدي ما يلي الذي يعرض المشاركات بناءً على علامة.يمكن استخدام نفس الشيء بنفس السهولة لإعادة المشاركات بناءً على مصطلح بحث أو فئة.والفرق الوحيد هو عبارة حيث.لذا مما رأيته يمكن استخدام أشجار التعبير أو منشئي المسند، على الرغم من أنني لا أعرف ما إذا كانت هذه هي نفسها.كما كان DLINQ خيارًا في منشور SO من عام 2013.وأعتقد أن LinqKit هو خيار أيضًا.هل يمكن لأي شخص أن يشير في الاتجاه الصحيح لإنشاء عبارة أكثر عمومية؟

هذا هو الجزء الذي أود أن أجعله ديناميكيًا Where(Function(t) t.PostTag.Any(Function(t1) t1.Tag.StartsWith(tag))) حتى أتمكن من التبديل بسهولة في PostCategory أو Posts بدلاً من PostTag.

الرمز:

Return _postRepository.SelectAll.Where(Function(t) t.PostTag.Any(Function(t1) t1.Tag.StartsWith(tag))).Select(Function(S) New be_PostsViewModel With {.IsPublished = S.PostIsPublished, .Id = S.PostId, .PostSummary = S.PostSummary, .PostDateCreated = S.PostDateCreated, .PostTitle = S.PostTitle, .PostTags = S.PostTag}).OrderByDescending(Function(d) d.PostDateCreated).Where(Function(p) p.IsPublished = True).Skip((Page - 1) * PageSize).Take(PageSize).ToList

هل كانت مفيدة؟

المحلول

تم حلها -

Dim PostsByTagExpression As Expression(Of Func(Of PostSummaryDTO, Boolean)) =
Function(p) p.PostTag.Any(Function(t1) t1.Tag.StartsWith(Word))

Dim postsbytag = _postRepository.SelectAll.AsExpandable.Where(PostsByTagExpression)
.Select
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top