diff --git a/.gitignore b/.gitignore
index 0359270..269dc48 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ Thumbs.db
/*.shfbproj_*
/*.dotCover
_ReSharper.*
+/.vs
diff --git a/NHibernate.OData.Test/Domain/Model.hbm.xml b/NHibernate.OData.Test/Domain/Model.hbm.xml
index 4a6ecde..f3571e3 100644
--- a/NHibernate.OData.Test/Domain/Model.hbm.xml
+++ b/NHibernate.OData.Test/Domain/Model.hbm.xml
@@ -13,6 +13,10 @@
+
+
+
+
diff --git a/NHibernate.OData.Test/Domain/Parent.cs b/NHibernate.OData.Test/Domain/Parent.cs
index 234d31d..030d876 100644
--- a/NHibernate.OData.Test/Domain/Parent.cs
+++ b/NHibernate.OData.Test/Domain/Parent.cs
@@ -21,6 +21,8 @@ public class Parent : IEntity
public virtual ISet RelatedParents { get; set; }
+ public virtual IEnumerable EnumerableRelatedParents { get; set; }
+
public override string ToString()
{
return Name;
diff --git a/NHibernate.OData.Test/Issues/Issue23Fixture.cs b/NHibernate.OData.Test/Issues/Issue23Fixture.cs
new file mode 100644
index 0000000..7a268e1
--- /dev/null
+++ b/NHibernate.OData.Test/Issues/Issue23Fixture.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NHibernate.OData.Test.Domain;
+using NHibernate.OData.Test.Support;
+using NUnit.Framework;
+
+namespace NHibernate.OData.Test.Issues
+{
+ [TestFixture]
+ internal class Issue23Fixture : DomainTestFixture
+ {
+ [Test]
+ public void InterfacePropertNotRecognizedAsCollection()
+ {
+ Verify(
+ "EnumerableRelatedParents/any(o: o/Int32 eq 9)",
+ Session.QueryOver().Where(x => x.Name == "Parent 10").List()
+ );
+ }
+ }
+}
diff --git a/NHibernate.OData.Test/NHibernate.OData.Test.csproj b/NHibernate.OData.Test/NHibernate.OData.Test.csproj
index a6a60c6..adf020f 100644
--- a/NHibernate.OData.Test/NHibernate.OData.Test.csproj
+++ b/NHibernate.OData.Test/NHibernate.OData.Test.csproj
@@ -79,6 +79,7 @@
+
diff --git a/NHibernate.OData.Test/Support/DomainTestFixture.cs b/NHibernate.OData.Test/Support/DomainTestFixture.cs
index 09b1d8d..af28e93 100644
--- a/NHibernate.OData.Test/Support/DomainTestFixture.cs
+++ b/NHibernate.OData.Test/Support/DomainTestFixture.cs
@@ -80,7 +80,7 @@ private void PopulateDatabase()
{ "DynamicInt", i },
{ "DynamicChildRef", previousChild },
},
- RelatedParents = new HashSet(parents),
+ RelatedParents = new HashSet(parents)
};
if (i == 10)
@@ -105,6 +105,8 @@ private void PopulateDatabase()
if (i == 10)
parent.RelatedParents = new HashSet(parents.Where(x => x.Int32 >= 5));
+ parent.EnumerableRelatedParents = parent.RelatedParents;
+
session.Save(parent);
parents.Add(parent);
diff --git a/NHibernate.OData/TypeUtil.cs b/NHibernate.OData/TypeUtil.cs
index 7269677..1c2f326 100644
--- a/NHibernate.OData/TypeUtil.cs
+++ b/NHibernate.OData/TypeUtil.cs
@@ -12,11 +12,19 @@ public static System.Type TryGetCollectionItemType(System.Type collectionType)
if (collectionType == null)
return null;
- System.Type enumerableType = collectionType.GetInterfaces().FirstOrDefault(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEnumerable<>));
+ if (collectionType.IsInterface && IsCollectionType(collectionType))
+ return collectionType.GetGenericArguments().Single();
+
+ System.Type enumerableType = collectionType.GetInterfaces().FirstOrDefault(IsCollectionType);
if (enumerableType == null)
return null;
return enumerableType.GetGenericArguments().Single();
}
+
+ private static bool IsCollectionType(System.Type type)
+ {
+ return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IEnumerable<>);
+ }
}
}