Increase performance of string matching function
You're just looking to find any textStatement's that exist in Library.Statements? A HashSet will make easy work of this:

IEnumerable&lt;string&gt; splitInputStatements = SplitStatements(data);
HashSet&lt;string&gt; inputStatements = new HashSet&lt;string&gt;(splitInputStatements);

// If you're using Library.Statements in this way many times, it might just
// be a good idea to keep all of them cached in a HashSet to begin with so
// you don't have to build this.
IEnumerable&lt;string&gt; libraryStatementTexts = Library.Statements.Select(s =&gt; s.FullText);
HashSet&lt;string&gt; libraryStatements = new HashSet&lt;string&gt;(libraryStatementTexts);

// That's it, this is your result:
var matches = inputStatements.Intersect(libraryStatements);


This site has some handy notes for when to use collections of certain types.

Alternatively, you can skip making inputStatements a HashSet and continue using the IEnumerable directly like so::

inputStatements.Where(is =&gt; libraryStatements.Contains(is));