Ich arbeite an meinem ersten Projekt in .NET Core 2.0. Es ist ein einfaches Blog-System. Ich möchte Suchfunktionen basierend auf Titel und Tags hinzufügen. Meine Entitäten:Verwandte Tabellen in EF Core 2.0 filtern
public class Post
{
public int ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Body { get; set; }
public int CategoryID { get; set; }
public DateTime ReleaseDate { get; set; }
public string ImageName { get; set; }
public Category Category { get; set; }
public ICollection<PostTag> PostTags { get; } = new List<PostTag>();
}
public class PostTag
{
public int PostID { get; set; }
public int TagID { get; set; }
public Post Post { get; set; }
public Tag Tag { get; set; }
}
public class Tag
{
public int TagID { get; set; }
public string Name { get; set; }
public int Counter { get; set; }
public ICollection<PostTag> PostTags { get; } = new List<PostTag>();
public Tag()
{
Counter = 1;
}
Bisher habe ich mit so etwas kommen. Ich schloss mich der Tag-Tabelle an, um alle Tags für jeden Post in IndexView anzeigen zu können.
public async Task<IActionResult> Index(int? page, string searchString)
{
IQueryable<Post> posts = _context.Posts
.OrderByDescending(post => post.ReleaseDate)
.Include(post => post.Category)
.Include(post => post.PostTags)
.ThenInclude(pt => pt.Tag);
//SEARCH
if (!String.IsNullOrEmpty(searchString))
{
posts = posts.Where(post => post.PostTags.Any(pt => pt.Tag.Name.Contains(searchString)) || post.Title.Contains(searchString));
//POPULARITY INCREESE
var tag = _context.Tags.SingleOrDefault(t => t.Name == searchString);
if (tag != null)
{
tag.Counter += 1;
_context.Update(tag);
_context.SaveChanges();
}
}
int pageSize = 4;
return View("Index", await PaginatedList<Post>.CreateAsync(posts.AsNoTracking(), page ?? 1, pageSize));
}
Es ist wroking aber ich würde gerne wissen, ob es einen einfacheren oder besseren Weg gibt. Und wird .Where funktionieren, wenn ich nicht verwandte Tabellen einschließe?
Nein, es würde nicht funktionieren, denn wenn Sie nicht die verwandten Entitäten posts.where (...) würde nur die Beiträge, die Titel übereinstimmt, weil es keine sind PostTags und daher keine Tags. – Nikolaus