Указанный член типа TimeBandDescription не поддерживается в LINQ to Entities - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть код, который выглядит примерно так: ошибка при получении: указанный член типа TimeBandDescription не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей. Как я могу сделать это AsEnuermable?

public partial class TimeBand
{
    public TimeBand()
    {
    }

    public int Id { get; set; }

    public string Name { get; set; }

    public long From { get; set; }

    public long To { get; set; }

    [NotMapped]
    public string TimeBandDescription => $"{Name} ({TicksToHhMmFormat(From)} - {TicksToHhMmFormat(To)})";

    private static string TicksToHhMmFormat(long ticks)
    {
        if (ticks == long.MaxValue)
        {
            return "Max";
        }
        var timeSpan = new TimeSpan(ticks);
        return $"{(int)timeSpan.TotalHours}{timeSpan.ToString(@"\:mm")}";
    }
}

public class SuplierService : ISuplierService
{
        public SupplierInfoModel GetSupplierList(int supplierId)
            {
                var query = (from s in suppliers
                             join tb in TimeBands on s.fkTimeBandId equals tb.Id
                             where s.supplierId == supplierId
                             select new SupplierInfoModel
                             {
                                 SupplierId = supplierId,
                                 SupplierEmail = s.Email,
                                 Phone = s.Phone,
                                 Fax = s.Fax,
                                 TimeBandDescription = tb.TimeBandDescription,

1 Ответ

0 голосов
/ 09 апреля 2020

У меня есть рабочий раствор, но не самый красивый.

    join tb in TimeBands on s.fkTimeBandId equals tb.Id
    from tband in timeband.DefaultIfEmpty()




                var Results = (from s in suppliers
                                             join tb in TimeBands on s.fkTimeBandId equals tb.Id
                                             where s.supplierId == supplierId
                         select new
                            {
                                TimeBand = tband,
                                Supplier = new HotelInfoModel
                                {
                                                 SupplierId = supplierId,
                                                 SupplierEmail = s.Email,
                                                 Phone = s.Phone,
                                                 Fax = s.Fax,
                                                 //TimeBandDescription = tb.TimeBandDescription, // no longer needed
                                                . . .
                            }
                        }).ToList();                                    

                        foreach (var result in Results)
                        {
                            result.Supplier.TimeBandDescription = result.TimeBand?.TimeBandDescription ?? "No Time Band Desc";
                        }

        var suppliers = Results.Select(s => s.Supplier).ToList();
...