Линк к сущности заказать по странной проблеме - PullRequest
0 голосов
/ 05 сентября 2010

возможно глупый вопрос, первый раз с linq для сущностей (ну, в общем, linq).

таблица с идентификатором (int), значением (десятичным числом), именем (строкой)

для каждой записи мне нужно

id
list<string>
    id
    value
    name

СЛЕДУЮЩИЙ РАБОТАЕТ ШТРАФ

int pageSize=10
int pageIndex=2
var data = (from c in db.Customers
            orderby c.ID
            select new { c.ID, c.Value, c.Name }
             ).Skip(pageSize * pageIndex).Take(pageSize).ToArray();

но не организует данные так, как они мне нужны. Однако результаты таковы:

1 100 имя A

2 300 наименование B

3 200 наименование C

4 100 наименование D

СЛЕДУЮЩИЙ СДЕЛАЙ МЕНЯ

int pageSize=10
int pageIndex=2
var data2 = (from c in db.Customers
             orderby c.ID
             select new
             {
                  id = c.ID,
                  cell = new List<string> { 
                     SqlFunctions.StringConvert((double)c.ID), 
                     SqlFunctions.StringConvert(c.Value), 
                     c.Name
                     }
             }
       ).Skip(pageSize * pageIndex).Take(pageSize).ToArray();

, что приносит

1

     1        100     name A

2

     name B   300     2

3

     3        200     name C

4

     name D   100     4

и так далее ...

Я не могу понять, почему и как решить это без написания длинного кода, я бы пропустил с любовью.

Помогите пожалуйста, Фабрицио

Ответы [ 2 ]

1 голос
/ 05 сентября 2010

Я не знаю точно, почему ваш код не работает, но попробуйте использовать ToString вместо SqlFunction, например:

int pageSize = 10;
int pageIndex = 2;
var data = (from c in db.Customers
            orderby c.ID
            select new
            {
                c.ID, 
                cell = new List<string>{ c.ID.ToString(), c.Value.ToString(), c.Name }
            }).Skip(pageSize * pageIndex).Take(pageSize).ToArray();

или

var ordered = db.Customers.OrderBy(c => c.ID);
var page = orderedCustomers.Skip(pageIndex * pageSize).Take(pageSize);

var projection = page.Select(c => new
                 {
                     c.ID,
                     cell = new List<string> { c.ID.ToString(), c.Value.ToString(), c.Name }
                 }).ToArray();

Обновление: Я вижу, что вы не можете заставить Linq to Entity работать со своими строками.Но тогда вы можете сделать это локально :) try:

var ordered = db.Customers.OrderBy(c => c.ID);
var page = orderedCustomers.Skip(pageIndex * pageSize).Take(pageSize);

var local = page.AsEnumerable();

var projection = local.Select(c => new
                 {
                     c.ID,
                     cell = new List<string> { c.ID.ToString(), c.Value.ToString(), c.Name }
                 }).ToArray();
0 голосов
/ 05 сентября 2010

В конце я последовал вашему второму примеру, отделив linq от сущностей от linq, и использовал tostring (). Пишу все в одном предложении, которое я не смог бы выстроить в строку, сущности не поддерживают его.

Тем не менее, я хотел бы знать логику полученного результата shuffle, он страшный и нелогичный

Tks для вашего быстрого ответа.

...