Possible problem with LINQ provider
Possible problem with LINQ providerOld forum URL: forums.lhotka.net/forums/t/7911.aspx
Michael posted on Thursday, October 29, 2009I have a Connection class which simply exposes two Guid properties, which are decorated with [Indexable(IndexModeEnum.IndexModeAlways)]. In the Connections collection I have the following method:
public Connection GetConnection(Guid openingId)
var data = from connection in this
where connection.OpeningId1 == openingId
if (data.Count() == 1)
data = from connection in this
where connection.OpeningId2 == openingId
I'm doing two Linq queries to enable the index to work properly. (I can't do both checks in the same where, correct?) The method always returns null. When I change the condition to where connection.OpeningId1.Equals(openingId) it works as expected.
Adding the generic extension method:
public static T Dump<T>(this T instance)
Console.WriteLine(instance); return instance;
and changing the conditions to where connection.OpeningIdX.Dump() == openingId.Dump() or where (connection.OpeningIdX == openingId).Dump() makes it work as expected also.
Why is it so?
AaronErickson replied on Friday, October 30, 2009Hi Michael-
I suspect what is occuring is that the indexer test for equality does not go through an operator overload on == unless the type is primitive. I have seen similar behavior before. I suspect what I need to do is to check to see if == is supported and use that for checking equals.
I will likely put this on the backlog for updates in the .NET 4 version of CSLA, as there is a simple enough workaround for it.
Michael replied on Friday, October 30, 2009Hi Aaron
Thanks for the reply. Does that really explain how the Dump() extension method fixes it, which simply returns the instance passed in?
AaronErickson replied on Friday, October 30, 2009My guess is that using Dump probably moves it out of indexing mode... but it is hard to tell 100% without recreating a scenario.
Michael replied on Friday, October 30, 2009That makes sense.
Copyright (c) Marimer LLC