LINQ'查询语法' - where子句对int的列表进行过滤

时间:2014-08-20 00:39:44

标签: c# linq

苦苦思索如何让这个过滤器工作:

  var categoryIDs = new List<int>();
              categoryIDs.Add(2);
              categoryIDs.Add(3);

             var dbContacts = (from cnt in _db.Contacts
                join ucc in _db.UserContactCategories on cnt.id equals ucc.ContactID
                join cat in _db.Categories on ucc.CatDescID equals cat.id
                where categoryIDs.Equals(cnt.id)
                select new {cnt.id,
                    cnt.GivenName,
                    cnt.SurName                         
                }).ToList(); 

收到此错误消息:

  

无法将类型'System.Int32'强制转换为'System.Object'。 LINQ to Entities仅支持转换EDM原语或枚举类型

1 个答案:

答案 0 :(得分:3)

您正在尝试将List<int>int进行比较,后者无法正常工作。

如果您希望获取硬编码List<int>中的所有联系人,请使用Contains方法。

var categoryIDs = new List<int>();
              categoryIDs.Add(2);
              categoryIDs.Add(3);

             var dbContacts = (from cnt in _db.Contacts
                join ucc in _db.UserContactCategories on cnt.id equals ucc.ContactID
                join cat in _db.Categories on ucc.CatDescID equals cat.id
                where categoryIDs.Contains(cat.id)
                select new {cnt.id,
                    cnt.GivenName,
                    cnt.SurName                         
                }).ToList();