Linq und string.Contains() – Problem

Ich hatte eine kleine Methode, um mir bestimmte Datensätze aus einer Datenbank zu holen. Dazu nutze ich Linq, da es schön einfach ist.

        public IEnumerable<Data> Search(string filter)
        {
            var dataSet = from data in this.bigDataSet
                          where data.Name.Contains(filter)
                          select data;

            return dataSet;
        }

Über die Variable „filter“ wollte ich die Daten eingrenzen. Allerdings sollte es auch möglich sein, sich alle Datensätze anzusehen. In der MSDN zu string.Contains() lautet es:

Rückgabewert
true, wenn der value-Parameter in dieser Zeichenfolge vorkommt oder value eine leere Zeichenfolge („“) ist, andernfalls false.

Heißt für mich, dass ich „filter“ leer lassen kann und so alle Datensätze bekomme. Funktionierte aber nicht. Ich vermute mal, es liegt daran, dass ich Linq-to-Ent verwende. Das Workaround funktioniert aber ganz gut:

        public IEnumerable<Data> Search(string filter)
        {
            var dataSet = from data in this.bigDataSet
                          where (!string.IsNullOrEmpty(filter) ? data.Name.Contains(filter) : true)
                          select data;

            return dataSet;
        }

Vielleicht hat ja jemand genauere Informationen, warum der erste Ansatz nicht funktioniert. Auf Anhieb habe ich nichts gefunden.

ASP.NET MVC unter IIS 5.1 / 6

Ein kleines Problem von ASP.NET MVC liegt darin, dass es nur unter dem IIS7 läuft. Für den IIS7 braucht man aber Windows Server 2008 R2 bzw. Windows 7. Was ist wenn man dafür aber eben mal keine Lizenz hat sondern auf XP ausweichen muss? Dann muss man sich mit einem Workaround behelfen.

Einige habe ich auf codeville.net gefunden.
Ausprobiert habe ich selber nur „Option 2“. Dazu änderte ich in der Global.asax die Default-MapRoute:

routes.MapRoute(
    "Default",                                                           // Route name
    "{controller}.aspx/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Sofern im Projekt die Links über z.B. Html.ActionLink() erstellt werden, läuft das Projekt nun ohne weitere Probleme. Die Urls sehen nun so aus: http://localhost/Home.aspx/Index/123
Ist zwar nicht so der Hit, aber die einfachste Möglichkeit ohne viel gefrickel.

Aber etwas solltet ihr beachten. Sofern ihr die Authentifizierung nutzt, sollte ihr in der Web.config den Pfad zur Loginurl ändern:

<forms loginUrl="~/Account.aspx/LogOn" timeout="2880" />

Dann klappt es auch mit dem Nachbarn 🙂