Сущность многие ко многим проверяют, существует ли связь - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть две таблицы: Предметы и Цвета.Они имеют отношение ко многим.В CheckBoxList, который отображает цвета, я хочу проверить те, которые связаны с показанным элементом.

using (var db = new ProwebModel.Entities())
{
    var colors = db.Colors;

    foreach (ListItem color in ((CheckBoxList)(fv.FindControl("cblColors"))).Items)
    {
        var itemId = Convert.ToInt32(Request.QueryString["id"]);
        var colorNumber = Convert.ToInt32(color.Value);
        color.Selected = colors.Where(t => t.ColorNumber == colorNumber).First().Items.Where(t => t.ItemId == itemId).Count() > 0;
    }
}

Это работает нормально, но мне было интересно узнать об этой строке:

color.Selected = colors.Where(t => t.ColorNumber == colorNumber).First().Items.Where(t => t.ItemId == itemId).Count() > 0;

Есть ли лучший способ проверить, существует ли ассоциация?

Спасибо!

РЕДАКТИРОВАТЬ

Я изменил свой код на что-то лучшее ... Ясчитать.Есть ли еще лучший способ сделать это?

using (var db = new ProwebModel.Entities())
{
     var itemId = Convert.ToInt32(Request.QueryString["id"]);
     var ItemColors = db.Items.First(t => t.ItemId == itemId).Colors.ToList();

     foreach (ListItem color in ((CheckBoxList)(fv.FindControl("cblColors"))).Items)
     {
          var colorNumber = Convert.ToInt32(color.Value);
          color.Selected = ItemColors.Where(t => t.ColorNumber == colorNumber).Count() > 0;
     }
}

Большое спасибо!

Обновление кода

using (var db = new ProwebModel.Entities())
{
    var itemId = Convert.ToInt32(Request.QueryString["id"]);
    var ItemColors = db.Items.First(t => t.ItemId == itemId).Colors.ToList();

    foreach (ListItem color in ((CheckBoxList)(fv.FindControl("cblColors"))).Items)
    {
        var colorNumber = Convert.ToInt32(color.Value);
        color.Selected = ItemColors.Any(t => t.ColorNumber == colorNumber);
    }
}

1 Ответ

1 голос
/ 29 февраля 2012

Строка может быть, по крайней мере, переписана как:

color.Selected = colors.First(t => t.ColorNumber == colorNumber).Items.Any(t => t.ItemId == itemId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...