Преобразование запроса linq в наблюдаемую коллекцию - PullRequest
2 голосов
/ 21 февраля 2011

Я пытаюсь решить проблему linq. Я связываю данные с графиком silverlight telerik silverlight, но мне не везет. Я могу заставить график работать с жестко закодированными значениями, однако, когда я пытаюсь привязать его к базе данных, данные не возвращаются.

Возвращает ожидаемые данные.

  public class TranactionDetail
{
    public DateTime TransactionDate { get; set; }
    public int TransactionType { get; set; }
    public double TransactionAmount { get; set; }
    public int Month{ get; set; }
    public string MonthName { get; set; }
    public double TransactionCount { get; set; }


    public static ObservableCollection<TranactionDetail> GetTransactions(int transactionType)
    {
        ObservableCollection<TranactionDetail> data;


        if (transactionType == 1)
        {
            data = new ObservableCollection<TranactionDetail>()
                       {
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 11,Month = DateTime.Now.AddMonths(1).Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 3,Month = DateTime.Now.AddMonths(2).Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(3).Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(4).Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(5).Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 12,Month = DateTime.Now.AddMonths(6).Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(7).Month,TransactionType = 1} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(8).Month,TransactionType = 1} ,
                       };

        }
        else 
        {
            data = new ObservableCollection<TranactionDetail>()
            {
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.Month,TransactionType = 2} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(1).Month,TransactionType = 2} ,
                        new TranactionDetail(){TransactionAmount = 2,Month = DateTime.Now.AddMonths(2).Month,TransactionType = 2} ,
                        new TranactionDetail(){TransactionAmount = 5,Month = DateTime.Now.AddMonths(3).Month,TransactionType = 2} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(4).Month,TransactionType = 2} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(5).Month,TransactionType =2} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(6).Month,TransactionType = 2} ,
                        new TranactionDetail(){TransactionAmount = 1,Month = DateTime.Now.AddMonths(7).Month,TransactionType = 2} ,
                        new TranactionDetail(){TransactionAmount = 7,Month = DateTime.Now.AddMonths(8).Month,TransactionType = 2} ,
            };
        }
        return data;
    }
}

Привязка графика как этот

   List<ObservableCollection<TransactionDetail>> data = new List<ObservableCollection<ransactionDetail>>();
        data.Add(TransactionDetail.GetTransactions(1));
        data.Add(TransactionDetail.GetTransactions(3));         
        this.radChart.ItemsSource = data;

Xaml

<telerik:RadChart x:Name="radChart">
        <telerik:RadChart.DefaultView>
            <telerik:ChartDefaultView>
                <telerik:ChartDefaultView.ChartTitle>
                    <telerik:ChartTitle Content="Transaction Data" />
                </telerik:ChartDefaultView.ChartTitle>

            </telerik:ChartDefaultView>
        </telerik:RadChart.DefaultView>
        <telerik:RadChart.SeriesMappings>
            <telerik:SeriesMapping LegendLabel="Processed" CollectionIndex="0">
                <telerik:SeriesMapping.SeriesDefinition>
                    <telerik:LineSeriesDefinition ShowItemLabels="True" />
                </telerik:SeriesMapping.SeriesDefinition>
                <telerik:SeriesMapping.ItemMappings>
                    <telerik:ItemMapping DataPointMember="YValue" FieldName="TransactionAmount" />
                    <telerik:ItemMapping DataPointMember="XValue" FieldName="Month" />
                </telerik:SeriesMapping.ItemMappings>
            </telerik:SeriesMapping>
            <telerik:SeriesMapping LegendLabel="Redeemed" CollectionIndex="1">
                <telerik:SeriesMapping.SeriesDefinition>
                    <telerik:LineSeriesDefinition ShowItemLabels="True" />
                </telerik:SeriesMapping.SeriesDefinition>
                <telerik:SeriesMapping.ItemMappings>
                    <telerik:ItemMapping DataPointMember="YValue" FieldName="TransactionAmount" />
                    <telerik:ItemMapping DataPointMember="XValue" FieldName="Month"  />
                </telerik:SeriesMapping.ItemMappings>
            </telerik:SeriesMapping>
        </telerik:RadChart.SeriesMappings>
    </telerik:RadChart>

Теперь, если я попытаюсь связать данные с фактическими данными, такими как

 var grouped = from t in TransctionData
                      group t by new
                      {
                          t.PurchaseDate.Value.Month
                      }
                          into g
                          select new TransactionDetail()
                          {
                              Month = g.Select((n => n.PurchaseDate.Value.Month)).First(),
                              TransactionAmount = g.Count()
                          };


        List<ObservableCollection<TransactionDetail>> data = new     List<ObservableCollection<TransactionDetail>>();
        this.radChart.ItemsSource = grouped.ToList();

Ничего не возвращено. Я установил точку останова, и я вижу, что это значения внутри сгруппированных, и они выглядят как TransactionDetail.

Я предполагаю, что причиной является первый метод, использующий наблюдаемую коллекцию, по сравнению со вторым, использующий только tolist ().

Что мне нужно изменить?

Ответы [ 4 ]

2 голосов
/ 21 февраля 2011

Ответ на заголовок таков: http://clinq.codeplex.com/ Я никогда не использовал его, но вы можете попробовать узнать, что вы ищете.

0 голосов
/ 21 февраля 2011

Изменено отображение SeriesMapping в соответствии с требованиями руководства пользователя telerik

0 голосов
/ 21 февраля 2011
0 голосов
/ 21 февраля 2011

Привет. Вместо использования .ToList () Вы можете разыграть «сгруппированный» с помощью списка>

this.radChart.ItemsSource = (List<ObservableCollection<TransactionDetail>>)grouped;

Спасибо

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