SQL Server Compact 4.0 с условным сопоставлением строк в Entity Framework - PullRequest
0 голосов
/ 22 марта 2012

Похоже, что Entity Framework не может сравнивать значение с нулем, если это нулевое значение хранится в переменной: http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015361-incorrect-handling-of-null-variables-in-where-cl?ref=title

Так что я делаю что-то подобное, как предложили другие пользователиSO:

string description = null;
var transactions = from t in entities.Transactions
                   where description == null ? t.Description == null : t.Description == description
                   select t;

Хотя эта техника прекрасно работает при работе с int?или double ?, SQL Server Compact создает исключение EntityCommandExecutionException при использовании строк (как в примере выше).Исключение содержит следующие данные:

  InnerException: System.Data.SqlServerCe.SqlCeException
       Message=The specified argument value for the function is not valid. [ Argument # = 1,Name of function(if known) = isnull ]
       Source=SQL Server Compact ADO.NET Data Provider

Есть идеи, почему я это понимаю и как я могу это преодолеть?

1 Ответ

1 голос
/ 22 марта 2012

Да, по-видимому, ISNULL в стиле Compact .

просто прикольно. Вы можете сделать это на клиенте, хотя:

var transactions = description == null ?
                    entities.Transactions.Where(t.Description == null)
                    : entities.Transactions.Where(t.Description == description);

... и я подозреваю, что нетISNULL будет сгенерировано в этом случае.

...