Это, вероятно, привязка для LINQ pro, но это не соответствует моей основной емкости. У нас есть шесть таблиц, доступ через Entity Framework:LINQ Запрос через сложные отношения родительский/дочерний/родительский/дочерний
Stores { Storeid, Description }
ShoppingDays { ShoppingDayid, Date, Storeid }
Transactions { Transactionid, Amount, ShoppingDayid, PaintColorid }
PaintColors { PaintColorid }
DyeAllocations { DyeAllocationid, PaintColorid, Percent, DyeId }
Dyes { DyeId, Name }
магазинах, ShoppingDays и Транзакции таблицы просты и не нужны комментирования. Однако каждая транзакция покупает один цвет краски. Каждый цвет краски состоит из сочетания цветовых красителей, которые составляют до 100%.
Я хотел бы суммировать все доллары, потраченные на каждый краситель в каждый день в каждом магазине. Представьте, что в магазине 1 есть две транзакции в первый день. Одна транзакция за 30 долларов США за покупку фиолетовой краски (40% красного, 40% голубого, 20% черного), а другая за 20 долларов от Pink Paint (20% красного, 80% белого). Результаты будут выглядеть
Store1,1, красный, $ 16
Store1,1, синий, $ 12
Store1,1, черный, $ 6
Store1,1, белый, $ 16
Любая помощь быть наиболее оцененным. Я даже не уверен, с чего начать. Я сделал внутреннее соединение всех таблиц, а затем поместил данные в таблицу сводной таблицы excel, чтобы извлечь данные. Очевидно, что это неправильно.
Я начал с следующего. В нем представлена таблица, в которой показана каждая покупка красителя для каждой транзакции. Я хотел бы суммировать эти покупки для каждого магазина и дня покупки, но я не уверен, как это сделать.
var dyeValues = (from store in db.stores
join sd in db.shoppingdays on store.storeId equals sd.storeId
join tr in db.transactions on sd.shoppingdayId equals tr.shoppingdayId
join pc in db.paintcolors on tr.paintcolorId equals pc.paintcolorId
join da in db.dyeallocations on pc.paintcolorId equals da.paintcolorId
where da.percent > 0.0m
select new
{
store.Description,
shoppingdayDate = sd.Date,
da.dye.Name,
da.percent,
Allocation = da.percent * tr.Amount
});
где «краска» ..? где это происходит? также, по крайней мере, поделитесь нами тем, что вы пробовали. –
К сожалению, PaintId должен был быть PaintColorId. Честно говоря, я сделал плоское внутреннее соединение всех таблиц, а затем извлек данные, которые я хотел, используя сводную таблицу в Excel. Помимо этого, я начал с db.stores.selectmany (st => st.shoppingdays) .selectmany (sd => sd.transactions) ... и т. Д. Но я знаю, что это неправильный подход. Должен ли я начинать с красителей или красок и работать назад, может быть? – jlear
Привет @jlear, Stackoveflow - это не место, где вы можете сказать, что у меня есть эти данные, я хочу, чтобы это было из этого. Вам нужно проявить некоторые усилия на вашей стороне. Проверьте: http://stackoverflow.com/help/how-to-ask – bit