часть

ема

Необходимо преобразовать int в строку, используя EF4 + SQL CE4. Рекомендуемый вариант использования SqlFunctions.StringConvert (double) по-прежнему дает мне ошибки.

Опция 1 (Оригинал). Это дает мне ошибку:

public static IEnumerable<SelectListItem> xxGetCustomerList()
    {
        using (DatabaseEntities db = new DatabaseEntities())
        {
            var list = from l in db.Customers
                       orderby l.CompanyName
                       select new SelectListItem { Value = l.CustomerID.ToString(), Text = l.CompanyName };
            return list.ToList();
        }
    }

Вариант 2 (наиболее рекомендуемый). Затем, как подсказывают многие посты, я использовал функцию SqlFunctions.StringConvert () из библиотеки System.Data.Objects.SqlClient:

public static IEnumerable<SelectListItem> GetCustomerList()
    {
        using (DatabaseEntities db = new DatabaseEntities())
        {
            var list = from l in db.Customers
                       orderby l.CompanyName
                       select new SelectListItem { Value = SqlFunctions.StringConvert((double)l.CustomerID), Text = l.CompanyName };
            return list.ToList();
        }
    }

Который теперь показывает ниже ошибку:

The specified method 'System.String StringConvert(System.Nullable`1[System.Double])' on the type 'System.Data.Objects.SqlClient.SqlFunctions' cannot be translated into a LINQ to Entities store expression.

Вариант 3 (для очень конкретного случая). Затем в другом посте показано умное решение с использованием словаря, которое наконец работает:

public static IEnumerable<SelectListItem> xGetCustomerList()
    {
        using (DatabaseEntities db = new DatabaseEntities())
        {
            var customers = db.Customers.ToDictionary(k => k.CustomerID, k => k.CompanyName);
            var list = from l in customers
                       orderby l.Value
                       select new SelectListItem { Value = l.Key.ToString(), Text = l.Value };
            return list.ToList();
        }
    }

Но работают только для простых парных значений (ключ, значение). Может кто-нибудь помочь мне с другим решением или что я делаю не так с вариантом 2?

И я надеюсь, что Microsoft скоро сделает EF прямо перед тем, как подтолкнуть нас к переходу с L2S, который уже стабилен и гораздо более зрел. Я на самом деле использую EF4 только потому, что хочу использовать SQL CE, в противном случае я останусь с L2S.

Ответы на вопрос(1)

Ваш ответ на вопрос