我有这样一门课:
public class Tag {
public Int32 Id { get; set; }
public String Name { get; set; }
}
我有两个标签列表:
List<Tag> tags1;
List<Tag> tags2;
我使用LINQ的select来获取每个标记列表的id。然后:
List<Int32> ids1 = new List<Int32> { 1, 2, 3, 4 };
List<Int32> ids2 = new List<Int32> { 1, 2, 3, 4 };
List<Int32> ids3 = new List<Int32> { 2, 1, 3, 4 };
List<Int32> ids4 = new List<Int32> { 1, 2, 3, 5 };
List<Int32> ids5 = new List<Int32> { 1, 1, 3, 4 };
Ids1应该等于ids2和ids3…两者都有相同的数字。
Ids1不应该等于ids4和ids5…
我尝试了以下方法:
var a = ints1.Equals(ints2);
var b = ints1.Equals(ints3);
但两者都给我虚假。
检查标签列表是否相等的最快方法是什么?
更新
我正在寻找标签与一本书中的标签完全相同的帖子。
IRepository repository = new Repository(new Context());
IList<Tags> tags = new List<Tag> { new Tag { Id = 1 }, new Tag { Id = 2 } };
Book book = new Book { Tags = new List<Tag> { new Tag { Id = 1 }, new Tag { Id = 2 } } };
var posts = repository
.Include<Post>(x => x.Tags)
.Where(x => new HashSet<Int32>(tags.Select(y => y.Id)).SetEquals(book.Tags.Select(y => y.Id)))
.ToList();
我使用实体框架,我得到的错误:
System类型的异常。在mscorlib.dll中出现NotSupportedException',但在用户代码中没有处理 附加信息:LINQ to Entities不识别方法'Boolean SetEquals(System.Collections.Generic.IEnumerable ' 1[System.Int32])'方法,并且该方法不能转换为存储表达式。
我怎么解决这个问题?