Как исправить ошибку «Анонимный тип не содержит определения для поля» в linq join? - PullRequest
0 голосов
/ 07 января 2019

У меня есть набор данных с таблицей данных datatable, содержащей столбцы

PlantId, PlantName, OrderWeek, SupplierId, SupplierName, GroupId, GroupName, WeekDay, OrderCount, ReservedCount

Тогда у меня есть перечислимая GroupedByDate с полями OrderWeek, WeekDay, Supplier, SupplierId, PlantId, DeliveredCount

То, что создано

var GroupedByDate = from r in dsDta.Tables[0].Rows.Cast<DataRow>()
                    let eventTime = (DateTime)r["EntryTime"]
                    group r by new
                    {
                        WeekStart = new DateTime(eventTime.Year, eventTime.Month, eventTime.AddDays(-(int)(eventTime.DayOfWeek + 6) % 7).Day),
                        WeekDay = eventTime.DayOfWeek
                    } 
                    into g
                    select new
                    {
                        g.OrderWeek,
                        g.WeekDay,
                        g.Supplier,
                        g.SupplierID,
                        g.PlantId,
                        DeliveredCount = g.Count()
                    };

Я хотел бы объединить эти данные, используя

var result = from T1 in table1.Rows.Cast<DataRow>() 
                         join T2 in GroupedByDate 
                         on new
                         {
                             PlantID = T1.Field<int>("PlantId"),
                             SupplierID = T1.Field<int>("SupplierId"),
                             OrderWeek = T1.Field<DateTime>("OrderWeek"),
                             WeekDay = T1.Field<int>("Weekday")

                         }
                         equals new
                         {
                             T2.PlantID,
                             T2.SupplierID,
                             T2.OrderWeek,
                             T2.WeekDay

                         } into JoinedData
                         from TotalData in JoinedData
                         select new
                         {
                             PlantId = TotalData.PlantID,
                             PlantName = T1.Field<string>("PlantName"),
                             OrderWeek = TotalData.OrderWeek,
                             SupplierId = TotalData.SupplierID,
                             SupplierName = T1.Field<string>("SupplierName"),
                             GroupId = T1.Field<int>("FuelGroupId"),
                             GroupName = T1.Field<string>("FuelGroupName"),
                             Weekday = TotalData.WeekDay,
                             OrderCount = T1.Field<int>("OrderCount"),
                             ReservedCount = T1.Field<int>("ReservedCount"),
                             DeliveredCount = TotalData.Field<int>("DeliveredCount")
                         };

Все идет хорошо, кроме последней строки

DeliveredCount = TotalData.Field<int>("DeliveredCount")

приносит мне ошибку:

Ошибка CS1929 '' не содержит определения для 'Field', и для наилучшей перегрузки метода расширения 'DataRowExtensions.Field (DataRow, string)' требуется приемник типа 'DataRow'.

Что не так с моим кодом?

1 Ответ

0 голосов
/ 07 января 2019

Кажется, что TotalData не относится к типу DataRow, и вы не можете использовать .Field () Попробуйте использовать

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