2010-03-31 3 views
1
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) 
{ 
    ... 
} 
... 

Я бегу на вопрос где, если я запрашивая графа longIDs я получаю исключение:LINQ к Entities Выпуск

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

С кем это столкнулось? Благодарю.

+0

Возможный дубликат http://stackoverflow.com/questions/879411/entity-framework-unable-to-create-a-constant-value-of-type-closure-type – Andrey

+1

Не совсем обман IMHO. Такая же ошибка, но другое правильное решение. –

ответ

1

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

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 это more involved.

+0

Хмм, все еще получаю ту же проблему. Что вы имеете в виду, когда он побеждает, используя индекс? –

+0

А, пропустил другой вопрос (у вас его два). Я обновлю. 'col.ToLower' преобразуется в SQL как' LOWER (col) ', что означает, что индекс в' col' не может быть использован. –

+0

Я не думаю, что Содержит поддерживается L2E ... Правильно ли я? http://blogs.msdn.com/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to-entities.aspx –

Смежные вопросы