Entity Framework - запрос от многих ко многим - PullRequest
0 голосов
/ 29 мая 2018

Сначала используйте код MVC EF.
У меня есть 3 класса.Один создает много-много отношений между двумя другими.Я считаю, что это правильно настроено, он правильно создал таблицы в базе данных.Моя проблема в том, чтобы пытаться их запросить.Я пытаюсь вернуть коллекцию изображений, где! Picture.Del, Picture.OK2Publish имеет значение true / false / all и Pictures_Tag.ImageTag_ID == tagid (для каждого пользовательского ввода).Код ниже

public class Picture
{
    public int ID {get;set;}
    public string Path {get;set;}
    public string Caption {get;set;}
    public bool Ok2Publish {get;set;}
    public bool Del {get;set;}
}
public class ImageTag
{
    public int ID {get;set;}
    public string Tag {get;set;}
}
public class Pictures_Tag
{
    [Key]
    [Column(Order = 0)]
    [ForeignKey("Picture")]
    public Int16 Picture_ID { get; set; }
    [Key]
    [Column(Order = 1)]
    [ForeignKey("ImageTag")]
    public Int16 ImageTag_ID { get; set; }

    public virtual Picture Picture { get; set; }
    public virtual ImageTag ImageTag { get; set; }

    public byte PictureOrder { get; set; }
    public bool ShowInGallery { get; set; }
}

var px = db.Pictures
        .Include(b => b.Pictures_Tags).Include((Picture q) => .Pictures_Tags
        .Select((Pictures_Tag r) => r.ImageTag_ID == tagid ))
         .Where(c => !c.Del).OrderBy(z => z.PictureName);

if (searchPublish != "A")//show all 
{
    px = (searchPublish == "Y") ? px.Where(n => n.OK2Publish == true) : 
                                  px.Where(n => n.OK2Publish == false);
}

1 Ответ

0 голосов
/ 30 мая 2018

Измените ваш запрос на этот

var px = db.Pictures.Include(b => b.Pictures_Tags)
.Where(c => !c.Del && c.Pictures_Tags.Count(d => d.ImageTag_ID == tagid) > 0)
.OrderBy(z => z.PictureName);

Он вернет изображения, которые не были удалены, и если их теги имеют предоставленный tagId.Я думаю, вам не нужно преобразовывать данные и выполнять выборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...