Невозможно конвертировать Generic.Listв Generic.List - PullRequest
4 голосов
/ 14 сентября 2011

Я не уверен, правильно ли я поступлю.Я пытаюсь выбрать только несколько элементов, которые я получаю из запроса LINQ.В конце концов я захочу получить большую часть информации, но некоторые поля имеют идентификаторы FK ID, поэтому мне придется получать значения их имен из других таблиц.преобразование списка из анонимных в счета.Как мне обойти это?

public class BillDO
{
    /// <summary>
    /// Returns all user bills based on their UserName
    /// </summary>
    /// <param name="UserName"></param>
    /// <returns></returns>
    public List<Bill> GetBills(string UserName)
    {
        BillsEntities be = new BillsEntities();

        var q = from b in be.Bills
                where b.UserName == UserName
                orderby b.DueDate
                select new { b.DueDate, b.Name, b.PaymentAmount, b.URL };

        List<Bill> billList = q.ToList();

        return billList;
    }
}

Ответы [ 2 ]

8 голосов
/ 14 сентября 2011

Мы не можем точно сказать наверняка, но я подозреваю, вы могли бы сделать:

var q = from b in be.Bills
        where b.UserName == UserName
        orderby b.DueDate
        select new { b.DueDate, b.Name, b.PaymentAmount, b.URL };

return q.AsEnumerable()
        .Select(b => new Bill { DueDate = b.DueDate,
                                Name = b.Name,
                                PaymentAmount = b.PaymentAmount,
                                URL = b.URL })
        .ToList();

Другими словами, извлекайте данные из базы данных как анонимные типы, но затем возвращайте список «созданных вручную объектов» с соответствующими свойствами, скопированными.

1 голос
/ 14 сентября 2011

Как сказал @Jon Skeet, мы не знаем, как выглядит Bill, но исходя из контекста, чтобы сделать эту работу, вам нужно:

public List<Bill> GetBills(string UserName)
{
    BillsEntities be = new BillsEntities();

    return new List<Bill>(from b in be.Bills
            where b.UserName == UserName
            orderby b.DueDate
            select new Bill {
                DueDate = b.DueDate, 
                Name = b.Name, 
                PaymentAmount = b.PaymentAmount,
                Url = b.URL
            });
}

Предполагается, что выбранные вами свойства отражают точные свойства вашего Bill класса и что не будет никаких исключений нулевой ссылки или неверных аргументов конструктора.

...