Όπως λέμε κάθε φορά που βγαίνει μία ερώτηση για ελληνικά, "
O SQL Server δεν χρειάζεται κόλπα για να υποστηρίξει ελληνικά". Αν το πεδίο στον πίνακα σου είναι nvarchar και τα στοιχεία που έχεις αποθηκεύσει είναι επίσης nvarchar και ότι τίποτε "μασημένα" κινέζικα, δεν θα έχεις κανένα πρόβλημα.
Από εκεί και πέρα, έχεις το θέμα του case sensitivity το οποίο δεν έχει τίποτε να κάνει με τα ελληνικά. Αν για παράδειγμα το collation της βάσης ή του πεδίου είναι CS (Case Sensitive) το mName που δίνεις θα πρέπει να έχει ακριβώς το ίδιο case με τις τιμές στη βάση. Συνήθως τα default settings με τα οποία δημιουργείται μία βάση είναι CI_AS, που σημαίνει Case Incencitive, Accent Sensitive. Το accent sensitive σημαίνει ότι οι τόνοι λαμβάνονται υπόψη και μία τονισμένη λέξη δεν θεωρείται ίδια με μία μή τονισμένη λέξη.
Δεν προσδιορίζεις ποιό Linq provider χρησιμοποιείς αλλά υποψιάζομαι ότι μάλλον χρησιμοποιείς Entity Framework.
Αυτό το post στο StackOverflow αναφέρει ότι ενώ το LINQ to SQL και το NHibernate εκτελούν ένα LIKE όταν δουν το StartsWith, το Entity Framework το αντικαθιστά με ένα CHARINDEX. Μπλιάχ.
Μία λύση είναι να πας σε κάτι πιο ώριμο, όπως το NHibernate. Άλλη λύση είναι αντί για LINQ statement να χρησιμοποιήσεις EQL:
var allCustomers=entities.Table.Where("it.Name LIKE @searchTerm", new ObjectParameter("searchTerm", mName));
Άλλη μία λύση είναι να προσθέσεις το δικό σου Like function στο edmx και να το καλέσεις όπως περιγράφεται
εδώ.
Προσωπικά θα προτιμούσα την 1η λύση, με το ζόρι τη δεύτερη. Θεωρώ εντελώς παρανοϊκό να πρέπει να κάνω τέτοιες αλχημείες για να χρησιμοποιήσω ένα τόσο συνηθισμένο τελεστή όπως το LIKE.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos