public void TestLinqQueryEnum()
{
var connectionString = GetConnectionString("TestLinqQueryEnum");
if (connectionString.Contains("type=dotnetrdf"))
{
Assert.Inconclusive("Enum tests fail against DNR store");
}
var context = new MyEntityContext(connectionString);
var entity1 = context.TestEntities.Create();
entity1.SomeEnumeration = TestEnumeration.Second;
entity1.SomeNullableEnumeration = TestEnumeration.Third;
entity1.SomeNullableFlagsEnumeration = TestFlagsEnumeration.FlagA | TestFlagsEnumeration.FlagB;
context.SaveChanges();
// Find by single flag
IList<ITestEntity> results = context.TestEntities.Where(e => e.SomeEnumeration == TestEnumeration.Second).ToList();
Assert.AreEqual(1, results.Count);
Assert.IsTrue(results.Any(x=>x.Id.Equals(entity1.Id)));
// Find by flag combo
results =
context.TestEntities.Where(
e => e.SomeNullableFlagsEnumeration == (TestFlagsEnumeration.FlagB | TestFlagsEnumeration.FlagA)).ToList();
Assert.AreEqual(1, results.Count);
Assert.IsTrue(results.Any(x => x.Id.Equals(entity1.Id)));
// Find by one flag of combo
results = context.TestEntities.Where(
e => ((e.SomeNullableFlagsEnumeration & TestFlagsEnumeration.FlagB) == TestFlagsEnumeration.FlagB)).
ToList();
Assert.AreEqual(1, results.Count);
Assert.IsTrue(results.Any(x => x.Id.Equals(entity1.Id)));
// Find by one flag not set on combo
results = context.TestEntities.Where(
e => ((e.SomeNullableFlagsEnumeration & TestFlagsEnumeration.FlagC) == TestFlagsEnumeration.NoFlags)).
ToList();
Assert.AreEqual(1, results.Count);
Assert.IsTrue(results.Any(x => x.Id.Equals(entity1.Id)));
// Find by both flags set on combo
results = context.TestEntities.Where(
e =>
((e.SomeNullableFlagsEnumeration & (TestFlagsEnumeration.FlagA | TestFlagsEnumeration.FlagB)) ==
(TestFlagsEnumeration.FlagA | TestFlagsEnumeration.FlagB))).ToList();
Assert.AreEqual(1, results.Count);
Assert.IsTrue(results.Any(x => x.Id.Equals(entity1.Id)));
results = context.TestEntities.Where(
e =>
((e.SomeNullableFlagsEnumeration & (TestFlagsEnumeration.FlagA | TestFlagsEnumeration.FlagC)) ==
(TestFlagsEnumeration.FlagA | TestFlagsEnumeration.FlagC))).ToList();
Assert.AreEqual(0, results.Count);
// Find by NoFlags
results =
context.TestEntities.Where(
e => e.SomeFlagsEnumeration == TestFlagsEnumeration.NoFlags).ToList();
Assert.AreEqual(1, results.Count);
Assert.IsTrue(results.Any(x => x.Id.Equals(entity1.Id)));
}