pierre
pierre

Reputation: 1245

Compare value to array of strings using StartsWith

I have an array:

string[] exceptions = new string[] { "one", two", "one_1", "three" };

.. I want to be able to say:

var result = from c in myCollection
             where not c.Property[3].Value.StartWith(exceptions)
             select c;

So I want myCollection to be filtered to only show those records whose Property[3].Value does not StartWith a value in the exceptions array. I know StartsWith doesn't take a collection so I'm unsure if this is possible via LINQ or not.

Is this possible in LINQ?! Or am I trying to shoehorn my problem into a LINQ solution?

EDIT: I should say, Contains is not an option since I only want to exclude elements whose property startswith the exception string.

Upvotes: 14

Views: 26180

Answers (5)

sll
sll

Reputation: 62564

var result =  myCollection.Where(c =>  
                           exceptions.All(e => 
                                       !c.Property[3].Value.StartsWith(e));

Upvotes: 18

Enigmativity
Enigmativity

Reputation: 117175

Try this:

string[] exceptions = new string[] { "one", "two", "one_1", "three" };

var result = from c in myCollection
            where !exceptions.Any(exception =>
                c.Property[3].Value.StartsWith(exception))
            select c;

Upvotes: 3

Paul
Paul

Reputation: 1483

You could use IndexOfAny (and check result is index position zero) as that takes a collection.

Upvotes: 3

hungryMind
hungryMind

Reputation: 7009

var result = myCollection
              .where(
                 rs=>exceptions
                 .where(
                     rs1=>!rs.property[3].value.startsWith(rs1)
                  )
              )

Upvotes: 0

Krypto_47
Krypto_47

Reputation: 141

You can select the collection of item you don't want then do a IEnumerable.Except().

I should look like this :

var result = from c in myCollection               
             where not c.Property[3].Value.StartWith(exceptions)               
             select c;  

var finalResult = myCollection.Except(myCollection.Select(i => i.StartWith(exception)));

Upvotes: 0

Related Questions