【发布时间】:2019-12-08 11:21:27
【问题描述】:
我正在构建一个 WinForm,它在 DataGridView 中显示每个客户的约会次数。我可以使用基本的 SELECT 语句来做到这一点,但要求至少需要 2 个 Lambda 表达式。我创建了 1 个 Lambda 表达式,但到目前为止它什么也没做。据我了解,Lambda 可用于查询 DataTable,类似于 SQL 语句查询表的方式。但由于某种原因,什么都没有发生。 DataTable 填得很好,但 Lambda 什么也没做。
这是 WinForm 的全部代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.Entity;
using System.Data.Linq;
namespace C969_Software_2
{
public struct Customer
{
public string customerName;
public int numberOfApps;
}
public partial class CustomerReports : Form
{
public CustomerReports()
{
InitializeComponent();
customerReportView.DataSource = getReport();
}
public static DataTable getReport()
{
string SqlString = "SELECT * FROM customer";
MySqlConnection c = new MySqlConnection(SqlUpdater.conString);
MySqlDataAdapter sda = new MySqlDataAdapter(SqlString, c);
DataTable dt = new DataTable();
c.Open();
sda.Fill(dt);
dt.AsEnumerable()
.Where(i => i.Field<int>("customerId") == 1)
.Select(i => new { name = i.Field<string>("customerName")});
return dt;
}
}
}
任何指针将不胜感激!
【问题讨论】:
-
没有告诉 Lamba 函数做任何事情。这就像一个固定查询,直到需要才执行。您可以通过附加
.ToArray()或.ToList()使其运行。 -
AlwaysLearning:感谢您的提示!现在我看到了一些人们能够使用 .CopyToDataTable() 的实例,但在这种情况下似乎不起作用。
-
.CopyToDataTable()在这里不起作用,因为它需要IEnumerable<DataRow>作为源,而您选择的是IEnumerable<SomeAnonymousObject>。即:您的.Select()语句正在返回一个新对象。 -
@PatrickDavis,另外,请在用户名前添加
@符号,以便他们得到通知。