LINQ to Entity Issue - PullRequest
       15

LINQ to Entity Issue

1 голос
/ 31 марта 2010
using(SampleEntities entities = new SampleEntities()) {
var userMap = from ad in entities.SampleGroupsSet
              from uid in distinctUserIDs
              where ad.ShortUserID.ToLower() == uid.ToLower()
              select new {shortID = uid, longID = ad.UserID};

string userID = "sampleId";
var longIDs = from map in userMap
              where map.shortID.ToLower() == userID.ToLower()
              select map.longID;

if (longIDs != null && longIDs.Count() > 0)
{
    ...
}
...

Я столкнулся с проблемой, когда при запросе количества длинных идентификаторов я получаю исключение:

"Невозможно создать постоянное значение типа 'Тип закрытия'. В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid ')."

Кто-нибудь сталкивался с этим? Спасибо.

1 Ответ

1 голос
/ 31 марта 2010

У вас есть две проблемы. Это:

uid.ToLower()

... не может быть преобразовано в SQL. Это:

          where map.shortID.ToLower() == userID.ToLower()

Это неправильный способ сделать нечувствительным к регистру ограничение. Он побеждает, используя индекс, и вызывает проблему, на которую вы ссылаетесь. Вместо этого выполните:

          where map.shortID.Equals(userID, StringComparison.OrdinalIgnoreCase) // or whatever...

Второй вопрос: вы, кажется, пытаетесь сделать «где в». Но это неправильный путь. В EF 4 вы делаете:

where distinctUserIDs.Contains(ad.ShortUserID)

В EF 1 он более вовлечен .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...