Добавление индекса в коллекцию с использованием EF 4.1 и XAML (для таблицы рекордов) - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть веб-сервис, который я вызываю из приложения WP7.Я получаю список рекордов в таблице (имя / оценка). Какой самый простой способ добавить третий крайний столбец слева, который является просто строкой?

Нужно ли добавлять свойствок сущности?Есть ли способ получить номер строки?

Я попробовал это ниже, но безуспешно ..

 [OperationContract]
    public List<DMHighScore> GetScores()
    {
        using (var db = new DMModelContainer())
        {
            //  return db.DMHighScores.ToList();

            var collOrderedHighScoreItem = (from o in db.DMHighScores
                                            orderby o.UserScore ascending
                                            select new
                                            {
                                                o.UserName,
                                                o.UserScore
                                            }).Take(20);


            var collOrderedHighScoreItem2 = collOrderedHighScoreItem.AsEnumerable().Select((x, i) => new DMHighScoreDTO
            {
                UserName = x.UserName,
                UserScore = x.UserScore
            }).ToList();



        }


    }
  [DataContract]
public class DMHighScoreDTO
{
    int Rank;
    string UserName;
    string UserScore;
}

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Итак, давайте предположим, что вы хотите загрузить 100 лучших пользователей в таблицу лидеров, и вы хотите, чтобы их рейтинг был включен:

[OperationContract]
public List<ScoreDto> GetTop100()
{
    // Linq to entities query
    var query = (from u from context.Users
                 order by u.Score
                 select new 
                     {
                         u.Name,
                         u.Score
                     }).Take(100);

    // Linq to objects query from working on 100 records loaded from DB
    // Select with index doesn't work in linq to entities
    var data = query.AsEnumerable().Select((x, i) => new ScoreDto
        {
            Rank = i + 1,
            Name = x.Name,
            Score = x.Score
        }).ToList();

    return data;
 }
1 голос
/ 12 апреля 2011

для чего будет использоваться номер строки? если это для заказа, могу ли я добавить столбец с именем Order, а затем сопоставить столбец с вашей сущностью.

если вам требуется индекс строки, вы также можете вызвать .ToList () в запросе и извлечь местоположения индекса для каждого объекта.

Редактировать:

Вы можете добавить свойство Rank и установить его в значение Ignore. Это позволит вам пройти через коллекцию, установить ранг с помощью простого цикла for. Это также не будет сохранено в базе данных. Он также не будет содержать обязательных столбцов в базе данных.

Это добавляет дополнительную итерацию.

другой способ сделать это. Это будет означать добавление номера ранга в сгенерированный пользовательский интерфейс, а не в сбор данных, используемый для привязки.

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