C# 如何使用linq作为Microsoft报表的数据源

C# 如何使用linq作为Microsoft报表的数据源,c#,linq,report,C#,Linq,Report,每个约会对象都包含一个考试对象。 我想使用linq查询的结果作为报告的数据源。但是,报告中仅显示IEnumerable考试中的第一行,即使它包含81行。我怎样才能解决这个问题 出于您的目的,您可以使用以下代码: var exams = (from appointment in appointments select new {coursecode = (appointment.Tag as exam).ID}).ToList(); rpt.LocalReport.DataSources.Add

每个约会对象都包含一个考试对象。
我想使用linq查询的结果作为报告的数据源。但是,报告中仅显示IEnumerable考试中的第一行,即使它包含81行。我怎样才能解决这个问题

出于您的目的,您可以使用以下代码:

var exams = (from appointment in appointments select new {coursecode = (appointment.Tag as exam).ID}).ToList();

rpt.LocalReport.DataSources.Add(new ReportDataSource("dsExam". exams.AsEnumerable()));
rpt.ProcessingMode = ProcessingMode.Local;
rpt.RefreshReport();
var exams = (from appointment in appointments
               select new
                    {
                          ((Exam)appointment.CustomFields["Field"]).Id,
                          ((Exam)appointment.CustomFields["Field"]).Name,
                          ((Exam)appointment.CustomFields["Field"]).Date,
                                     ((Exam)appointment.CustomFields["Field"]).Period.StartTime,
                                     ((Exam)appointment.CustomFields["Field"]).Period.EndTime,
                                     Location = ((Exam)appointment.CustomFields["Field"]).Location.Name
                                });

        SetDataSource(exams);


    private void SetDataSource(object exams)
    {          
        scheduleBindingSource.DataSource = exams;
        this.rpTTViewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
        this.rpTTViewer.RefreshReport(); 
    }

作为旁注,
List
已经实现了
IEnumerable
,不需要使用'exames.asenuerable()
,只需通过考试
首先:你在使用什么ORM?Linq到SQL?实体框架(Linq到实体)?另外:“Microsoft report”-您是指SQL Server Reporting Services报表吗?我使用(几乎)相同的代码,工作正常。您的
.rdlc
文件外观如何?你用桌子吗?在
列表中是否有
文本框
?可能存在将集合限制为仅显示一行的条件。
//Create a dataset typed
DataSet ds = new DataSet();

//Constructor a dataset from Dataset Model, dataset use for crystal report
DataSet1.print_salesDataTable tb = new DataSet1.print_salesDataTable();

//Queries with the conditions is ID
QLGiayDepEntities list = new QLGiayDepEntities();
var result = (from n in list.print_sales
              where n.OrderID == txtID.Text
              select n).ToList();

//Fill result to table
foreach (print_sales item in result)
{
    tb.Rows.Add(
        item.OrderID,
        item.DateOrder,
        item.NameEmployee,
        item.Total,
        item.Recieved,
        item.Discount,
        item.Sum,
        item.FromCustomer,
        item.Notes,
        item.Barcode,
        item.Name,
        item.ColorName,
        item.SizeID,
        item.Quantity,
        item.Price,
        item.SubTotal);
}

//checking to print
if (result == null)
{
    MessageBox.Show("null");
}
else
{
    ds.Tables.Add(tb);
    CrystalReportSales1.SetDataSource(ds);
    crystalReportViewer1.ReportSource = CrystalReportSales1;
    crystalReportViewer1.PrintReport();
}