Помогите с написанием запроса linq - PullRequest
0 голосов
/ 28 октября 2009

Может ли кто-нибудь помочь мне написать запрос linq, это немного сбивает с толку ... В основном у меня есть переменная NumberberOfDays в моем коде, которая для этого примера равна 8

У меня есть таблица с этим списком.

   DayFrom  DayTo    Price
   1        3        20
   4        5        30
   6        8        40
   8        25       150

Мне нужно возвращать из linq строки на каждый день в моем случае 8 ...

так, следовательно, я получаю

20   (because day 1 and its from 1 to 3)
20   (because day 2 and its from 1 to 3)
20   (because day 3 and its from 1 to 3)
30   (because day 4 and its from 4 to 5)
30   (because day 5 and its from 4 to 5)
40   (because day 6 and its from 6 to 8)
40   (because day 6 and its from 6 to 8)
40   (because day 7 and its from 6 to 8)
40   (because day 8 and its from 6 to 8)

// no more records will be listed because we are on 8 and its the last day..

ТАК, в принципе, мне просто нужно вернуть ИТОГО всего в этом случае

20 + 20 + 20 + 30 + 30 + 40 + 40 + 40 + 40 = 280 .....

Я понятия не имею, с чего начать, если бы это было в коде, то я мог бы использовать счетчик для numOfDays и a для Next, чтобы проверить день и цену в пределах Dayfrom и Dayto ..

Буду очень признателен за любые отзывы.

Спасибо

Ответы [ 3 ]

1 голос
/ 28 октября 2009

Предполагая, что у вас есть класс с именем DataItem со свойствами DayFrom, DayTo и Price, должно работать следующее (заметьте, что я его не проверял):

int Total(int numberOfDays, DataItem[] items){
    var query =
        from item in items
        let daysInData = Math.Min(item.DayTo, numberOfDays) - item.DayFrom + 1
        where item.DayFrom >= numberOfDays
        select item.Price * daysInData;
    return query.Sum();
}
1 голос
/ 28 октября 2009
var priceList = new[] {
    new {DayFrom = 1, DayTo = 3, PriceList = 20},
    new {DayFrom = 4, DayTo = 5, PriceList = 30},
    new {DayFrom = 6, DayTo = 8, PriceList = 40},
    new {DayFrom = 9, DayTo = 25, PriceList = 150}
};

int days = 8;

var total = (from p in priceList
         from d in Enumerable.Range(1, days)
         where p.DayFrom <= d && p.DayTo >= d
         select p.PriceList).Sum();

Console.WriteLine(total);

Но в ваших данных в DayTo и DayFrom в 8 есть странность, поэтому я изменил их на 9.

0 голосов
/ 28 октября 2009
int numberOfDays = 8;

var data = new[] { new {DayFrom = 1, DayTo = 3, Price = 20},
              new {DayFrom = 4, DayTo = 5, Price = 30},
              new {DayFrom = 6, DayTo = 8, Price = 40},
              new {DayFrom = 8, DayTo = 25, Price = 150}};

int sum = data.SelectMany(x => Enumerable.Repeat(x, x.DayTo - x.DayFrom + 1))
    .Select(x => x.Price)
    .Take(numberOfDays)
    .Sum();

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