2017-02-28 4 views
0

nehmen Wenn ich ein Projekt mache, wurde ich an einem Ort verwirrt, um nur eindeutigen Wert aus der Tabelle abzurufen. dafür habe ich distinct, groupby-Klauseln in der linq-Abfrage, aber ich habe einen Fehler bekommen. Ich habe zwei Tabellen und die ID der Kategorie Tabelle Fremdschlüssel und ich brauche nur eindeutige ID aus der eine andere Galerie Tabelle abzurufenWie man verschiedene Werte von der Tabelle aus dem Fremdschlüssel in MVC Rasiermesser

Modell

public partial class Gallery 
{ 
    public int Id { get; set; } 
    public int CategoryId { get; set; } 
    public string ImageTitle { get; set; } 
    public string Image { get; set; } 

    public virtual Category Category { get; set; } 
} 




    public Category() 
    { 
     this.Galleries = new HashSet<Gallery>(); 
    } 

    public int Id { get; set; } 
    public string CategoryName { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Gallery> Galleries { get; set; } 
} 

dieses Modell ist die categoryid ist der Fremdschlüssel für die Galerie Klasse

Controller

public ActionResult GalleryCata() 
    { 
     var res = db.Galleries.ToList(); 
     return View(res); 
    } 

Ansicht

@model List<ThaniyamBank.Models.Gallery> 

    @for (var j = 0; j < Model.Count(); j++) 
     { 
      <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12"> 
       <div class="hovereffect"> 
        <img src="@Url.Content("~/GalleryImages/" + @Html.DisplayFor(m => m[j].Image))" class="img-responsive" alt="" /> 
        <div class="overlay"> 
         <h2>@Html.DisplayFor(m => m[j].Category.CategoryName) </h2> 
         <a class=" fancybox info " href="@Url.Content("~/GalleryImages/" + @Html.DisplayFor(m => m[j].Image))" data-fancybox-group="gallery"><i class="fa fa-eye" aria-hidden="true"></i></a> 
         <a class="info " href="gallery.html"><i class="fa fa-link" aria-hidden="true"></i></a> 
        </div> 
       </div> 
      </div> 
     } 

Ich muss die Bilder basierend auf der Kategorie anzeigen. Wenn ich die Anwendung starte, bekomme ich alle Bilder aus der Tabelle und nicht nach der Kategorie. Kann mir bitte jemand helfen, das Problem zu lösen ??

+1

Ich sehe keine "distinct, groupby". Zeigen Sie, was Sie versucht haben, was wahrscheinlich klarstellt, was Sie mit "einzigartig" meinen. Und zeigen Sie den Fehler. "Ich habe einen Fehler" bedeutet nicht viel. –

+0

wenn ich gebe var res = db.Galleries.Select (x => x.CategoryId) .Distinct(). ToList(); Im Controller wurde der Fehler gefunden Das an das Wörterbuch übergebene Modellelement ist vom Typ 'System.Collections.Generic.List'1 [System.Int32]', aber für dieses Wörterbuch ist ein Modellelement vom Typ 'System.Collections.Generic.List' erforderlich '1 [A.Models.Gallery] '. – user256

+1

Ziemlich klare Fehlermeldung, nicht wahr? –

Antwort

0

Select weist EF an, einen bestimmten Wert abzurufen, daher gibt db.Galleries.Select(x=>x.CategoryId) eine Auflistung von Ganzzahlen zurück, daher erhalten Sie die Fehlermeldung.

Was Sie wollen, ist eine Where Klausel zu verwenden:

var res = db.Galleries.Where(x => x.CategoryId == selectedCategoryId).ToList(); 

die IList<Gallery> zurückgibt. Sie müssen int selectedCategoryId an Ihre Aktion übergeben.

Distinct wird nur benötigt, wenn Sie davon ausgehen, dass dieselbe Galerie mehrmals in derselben Kategorie enthalten ist.

Verwandte Themen