C# 实体多对多检查关系是否存在

C# 实体多对多检查关系是否存在,c#,entity-framework-4,C#,Entity Framework 4,我有两张桌子:物品和颜色。他们有一种多对多的关系。在显示颜色的复选框列表中,我想检查与所示项目关联的颜色 using (var db = new ProwebModel.Entities()) { var colors = db.Colors; foreach (ListItem color in ((CheckBoxList)(fv.FindControl("cblColors"))).Items) { var itemId = Convert.ToI

我有两张桌子:物品和颜色。他们有一种多对多的关系。在显示颜色的复选框列表中,我想检查与所示项目关联的颜色

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);
    }
}

该行至少可以重写为:

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

谢谢,我不知道Any()函数。我更改了这个->color.Selected=ItemColors.Any(t=>t.ColorNumber==ColorNumber)的行;嗨,在我写答案的时候,你的帖子已经被编辑过了,但是我保留了我的第一个答案,因为它展示了两个可能的改进,并且将它们应用到新代码中并不困难。