From b7ec182fa88c5cab8dd9bf43b69faf12ea3ef26b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Waldemar=20M=C4=99kal?= Date: Sat, 28 Nov 2015 21:34:47 +0100 Subject: [PATCH] https://github.com/markrendle/Simple.Data/issues/379 Added support for comparing 2 columns in FindAll/Where in InMemoryAdapter. --- Simple.Data.InMemoryTest/InMemoryTests.cs | 17 +++++++++++++++++ Simple.Data.TestHelper/packages.config | 1 - .../QueryPolyfills/WhereClauseHandler.cs | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Simple.Data.InMemoryTest/InMemoryTests.cs b/Simple.Data.InMemoryTest/InMemoryTests.cs index d462583d..6e6870ba 100644 --- a/Simple.Data.InMemoryTest/InMemoryTests.cs +++ b/Simple.Data.InMemoryTest/InMemoryTests.cs @@ -834,5 +834,22 @@ public void UpdateWithOriginalValuesRowsUpdatedShouldBeZeroIfNewValueAreSameAsOr Assert.AreEqual(0, rowsUpdated); } + + [Test] + public void FindAll_When2ColumnsAreCompared_ReturnsMatchingRows() + { + Database.UseMockAdapter(new InMemoryAdapter()); + var db = Database.Open(); + db.Translations.Insert( + Text: "some text", + Language: "pl", + OriginalLanguage: "pl" + ); + + var result = db.Translations + .FindAll(db.Translations.Language == db.Translations.OriginalLanguage); + + Assert.AreEqual(1, result.Count()); + } } } diff --git a/Simple.Data.TestHelper/packages.config b/Simple.Data.TestHelper/packages.config index a5246444..27a38197 100644 --- a/Simple.Data.TestHelper/packages.config +++ b/Simple.Data.TestHelper/packages.config @@ -1,5 +1,4 @@  - \ No newline at end of file diff --git a/Simple.Data/QueryPolyfills/WhereClauseHandler.cs b/Simple.Data/QueryPolyfills/WhereClauseHandler.cs index 40e19e11..4a173a6e 100644 --- a/Simple.Data/QueryPolyfills/WhereClauseHandler.cs +++ b/Simple.Data/QueryPolyfills/WhereClauseHandler.cs @@ -110,6 +110,16 @@ private Func, bool> EqualExpressionToWhereClause(Sim }; } + if (arg.RightOperand.GetType() == typeof(ObjectReference)) + { + return d => { + var leftOperandResolved = Resolve(d, arg.LeftOperand); + var rightOperandResolved = Resolve(d, arg.RightOperand); + + return Enumerable.SequenceEqual(leftOperandResolved, rightOperandResolved); + }; + } + return d => Resolve(d, arg.LeftOperand).Contains(arg.RightOperand); }