LINQ To SQL exception: Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains operator

后端 未结 4 882
一向
一向 2020-11-30 11:05

Consider this LINQ To SQL query. It\'s intention is to take a string[] of search terms and apply the terms to a bunch of different fields on the SQL table:

s         


        
相关标签:
4条回答
  • 2020-11-30 11:24

    Just a thought (not directly related to the question, but it might help other viewers):

    I was getting the same error message as you, even though I was using the Contains() method correctly, and it took me quite a while to figure out that the root of my problem was returning an IEnumerable to something that needed to further filter the results of the L2S query. Once I changed the function's return type to an IQueryable, the problem went away. It makes sense, seeing that an IEnumerable can't be further filtered, but an IQueryable can.

    0 讨论(0)
  • 2020-11-30 11:35

    Replace the usages of Any with Contains in your query. eg:

    searchTerms.Contains(c.Email)
    

    This should get the result you're looking for. It looks backwards, but it's correct- it'll generate an IN operator for each field inside a Contains with all the elements in searchTerms.

    The AddressLine1 part won't work this way- you'll have to loop-generate the comparisons yourself with

    c.addressLine1.Contains(...)
    

    Something like PredicateBuilder can be helpful for this.

    0 讨论(0)
  • 2020-11-30 11:43

    Essentially, the error is saying that you are doing a join between two collections, one of which is a database table, and the other is an array. LINQ isn't designed to handle that -- either both need to be in the database, or both in-memory (with a special case exception made when using Contains)

    0 讨论(0)
  • 2020-11-30 11:44

    I was getting the same error, but none of the solutions posted above worked for me.

    What worked for me was to cast db.Custs into a list first, as so:

    List<Cust> =db.Custs.ToList<Cust>.Where(...
    

    I have no idea why it worked, but it did.

    0 讨论(0)
提交回复
热议问题