mieux façon de le fairerequête de projection avancée
using (var db = new SmartContext())
{
var MyQuery = from idr in db.ID_SB
join tk in db.Track_SB on idr.MB_Track_ID equals tk.MB_TrackID
join talr in db.Track_Album_Reln on tk.MB_TrackID equals talr.MB_Track_ID
join tal in db.Album_SB on talr.MB_AlbumID equals tal.MB_Release_ID
orderby idr.Last_played descending
select new
{
mb = tk.MB_TrackID,
Hash = idr.Hash,
Title = tk.Title,
Album = tal.Album_Name,
Times_Played = idr.Times_played,
Last_Played = idr.Last_played
};
string artist = "";
var list = new[] { new { Hash = "", Title = "", Album = "", Artist = "", Times_Played = "", Last_Played = ""}}.ToList();
list.Clear();
foreach (var q in MyQuery)
{
int i = 0;
var art = db.Track_Artist_Reln.Where(a => a.MB_Track_ID == q.mb);
foreach (var a in art)
{
var tart = db.Artist_SB.Where(ar => ar.MB_Artist_ID == a.MB_ArtistID).Select(ar => ar.Artist_Name);
foreach (var tar in tart)
{ if (i != 0) { artist = artist + ", " + tar; } else { artist = tar; i++; } }
}
list.Add(new
{
Hash = q.Hash.ToString(),
Title = q.Title.ToString(),
Album = q.Album.ToString(),
Artist = artist.ToString(),
Times_Played = q.Times_Played.ToString(),
Last_Played = q.Last_Played.ToString(),
});
}
ListView1.ItemsSource = list;
}
est-il une meilleure façon pour ce qu'il consomme beaucoup de temps
ce code sert à
dans ce que je veux pour récupérer
- hachage
- Titre
- ALBUMNAME
- Artiste (contenant tout l'artiste pour cette chanson dans artiste champ de ligne unique)
- fois joué
- Dernier joué
tout ce que je suis en mesure d'obtenir juste en se joindre à tout en dehors du nom de l'artiste
il y a beaucoup de relations possibles tables principales ID_SB, Track_SB, Album_SB, Artist_SB autres sont relation storin g les clés primaires des deux tables
Une chose rapide pour l'améliorer, déplacer les requêtes db imbriquées dans les deux boucles foreach pour la requête principale en l'ayant retourné comme une collection dans votre première requête. Cela entraînera beaucoup moins de voyages à la DB. –
Vous devriez également vous débarrasser des tables * _Reln, alors qu'EF prend directement en charge les relations plusieurs-à-plusieurs depuis de nombreuses années. –