Почему StringComparison.InvariantCultureIgnoreCase не работает с этим запросом Db4o linq? - PullRequest
3 голосов
/ 25 марта 2009

Следующий запрос работает. Я получаю верный результат при вводе имени с неправильным регистром.

private static IObjectContainer db = Db4oFactory.OpenFile(db4oPath);

    public static IQueryable<Company> GetCompaniesByName(string name) { 
        return (from Company c in db
                where c.Name.ToLowerInvariant().Equals(name.ToLowerInvariant())
                select c).AsQueryable();
    }

Следующий запрос с тем же параметром (в основном, тем же модульным тестом) не возвращает результатов. Отметить единственное отличие - это предложение where.

    public static IQueryable<Company> GetCompaniesByName(string name) { 
        return (from Company c in db
                where c.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)
                select c).AsQueryable();
    }

Почему?

1 Ответ

2 голосов
/ 25 марта 2009

Анализаторы выражений LINQ в значительной степени свободны для поддержки (или нет) любого набора операций, которые они выбирают. В случае LINQ-to-SQL и EF они сгенерируют исключение, если они что-то запутают (и я ожидаю, что вышесказанное попадет в это) - но похоже, что Db4o просто говорит «нет совпадений». 1001 *

Имеет ли Db40 возможность регистрировать запросы, которые он выполняет? Может быть, он делает что-то напуганное ... но мы можем только догадываться ...

...