linq to entities 检索数据库 table 行值并显示为 label.Text C# .net

linq to entities retrieve database table row value and display as label.Text C# .net

使用 LINQ to Entities。不是 SQL连接或任何其他方法。

我有一个网页,我需要在同一个数据库中显示一个数据表中的 'ID' 和另一个数据表中相应的 'Name'。 ID 和 Name 应显示为 lblOrderId.Text = OrderId.ToString();和 lblName.Text = Name.ToString();分别。
不必是字符串,我只需要标签中数据库中的值。

就目前情况而言,我没有收到任何标签文本,但如果我使用底部的代码,我得到的只是订单和交货日期。

包含 OrderId 的数据表有两列; OrderId 自动生成并位于第 0 列,ProductId。

包含名称的数据表有 6 列,名称在第 1 列中,因为第 0 列包含自动生成的客户 ID

我只需要最后添加的名称和 ID 即可显示为标签。

过去 5 小时我一直在这个网站和其他网站上对此进行研究,但似乎找不到适合我需要的解决方案。都是 SQL 连接和少量的数据库值到文本框。

请参阅下面的代码以及我所取得的成果,如果您需要任何进一步的编码或信息,请随时询问。

提前感谢您提供的任何建议或帮助。

ASPX.CS(后端)

protected void Page_Load(object sender, EventArgs e)
    {
        using (Entities myEntities = new Entities())
        {
             int OrderId = // Not sure what to put here, but if I don't have it I get the error *The name OrderId does not exist in the current context*
             var orderId = (from ord in myEntities.Orders
                           where ord.OrderId.Equals(OrderId) // Error here
                           select ord).Last();                

            lblOrderID.ForeColor = Color.Red;
            lblOrderID.Text = orderId.ToString();

使用以下有关名称的方法面临完全相同的错误。这两种方法都包含在相同的 Using Entities {} 花括号中。

var name = (from ord in myEntities.Customer
                        where ord.Name.Equals(Name)
                        select ord).Last();

            lblName.ForeColor = Color.Red;
            lblName.Text = name.ToString();

关闭 Using Entities {} 大括号,但仍在 Page_Load {} 大括号内我有以下代码来添加订单日期和交货日期,如下所示

        DateTime date = DateTime.Now;
        DateTime DeliveryDate = date.AddDays(5);

        lblDate.ForeColor = Color.Red;
        lblDeliveryDate.ForeColor = Color.Red;

        lblDate.Text = date.ToLongDateString();
        lblDeliveryDate.Text = DeliveryDate.ToLongDateString();

整块 Page_Load

protected void Page_Load(object sender, EventArgs e)
    {
        using (Entities myEntities = new Entities())
        {
            //int OrderId = Convert.ToInt32(); // Not sure what to put here, but if I don't have it I get the error *The name OrderId does not exist in the current context*

            var orderId = (from ord in myEntities.Orders
                           where ord.OrderId.Equals(OrderId)// Error here
                           select ord).Last();

            lblOrderID.ForeColor = Color.Red;
            lblOrderID.Text = orderId.ToString();


            var name = (from ord in myEntities.Customer
                        where ord.Name.Equals(Name)
                        select ord).Last();

            lblName.ForeColor = Color.Red;
            lblName.Text = name.ToString();
        }

        DateTime date = DateTime.Now;
        DateTime DeliveryDate = date.AddDays(5);

        lblDate.ForeColor = Color.Red;
        lblDeliveryDate.ForeColor = Color.Red;

        lblDate.Text = date.ToLongDateString();
        lblDeliveryDate.Text = DeliveryDate.ToLongDateString();
    }

ASPX(前端)

    <p>
            Hi 
        <asp:Label ID="lblName" runat="server" Text=""></asp:Label>
            Thank you for shopping at Cineplex.<br />
            <br />

            Your Order ID number is: 
        <asp:Label ID="lblOrderID" runat="server" Text=""></asp:Label><br />
            <br />

            Your order was placed on:
        <asp:Label ID="lblDate" runat="server" Text=""></asp:Label><br />
            <br />

            Delivery date:
        <asp:Label ID="lblDeliveryDate" runat="server" Text=""></asp:Label>
        </p>

硬编码名称和订单 ID 并删除实体和查询,如在后端使用下面的代码所示,这是一种享受,但这是不可接受的。客户需要在成功购买后查看他们的订单 ID。
唯一令人欣慰的是,我在所有四个标签中都得到了客户可以阅读的值。

 protected void Page_Load(object sender, EventArgs e)
    {
        lblName.ForeColor = Color.Red;
        lblName.Text = "User";

        lblOrderID.ForeColor = Color.Red;
        lblOrderID.Text = "1";

        DateTime date = DateTime.Now;
        DateTime DeliveryDate = date.AddDays(5);

        lblDate.ForeColor = Color.Red;
        lblDeliveryDate.ForeColor = Color.Red;

        lblDate.Text = date.ToLongDateString();
        lblDeliveryDate.Text = DeliveryDate.ToLongDateString();
    } 

你的问题是关于从数据库中查询一些东西。您可以从查询中删除所有 ASP 内容,因为它只会分散您的注意力。

相反,您应该向我们展示实体 类(订单、客户)。据我了解,您想要特定订单的 Order.OrderIdCustomer.Name(订购它的客户的),您不知道它是如何识别的。

假设您使用通常的 Customer/Order 示例模型,您的实体必须看起来像这样:

public class Customer
{
    public int CustomerId; // identifies a customer
    public string Name; // the customer's name
    public ICollection<Order> Orders; // collection of customer's orders
}

public class Order
{
    public int OrderId; // identifies an order
    public int CustomerId { get; } // ID of the customer who's order it is.
    public Customer Customer { get; } // The Customer entity of that customer
}

里面Page_Load(不相关的省略)

// 1st find out the ID of the one and only order the page is about
int orderId = 4711; // can't help here - where do you intend to get it from?

// 2nd retrieve from DB whatever we need later
string customerName;
using (var myEntities = new Entities())
{
    var orderInfo = (
        from order in myEntities.Orders
        where order.OrderId == orderId
        select new { CustomerName = order.Customer.Name }
        ).SingleOrDefault();
    if (orderInfo == null) // error handling if orderId is bad
        throw new Exception("No such order found.");
    customerName = orderInfo.CustomerName;
}

// 3rd use what we know to update controls
lblName.Text = customerName;

结果。 我将初始变量保存在 aspx.cs 页面上的两个不同会话中,它们是这样创建的:

int custID = Cust.CustomerId;
Session["CustID"] = Cust.CustomerId;

int newOrderID = ord.OrderId;
Session["newOrderID"] = ord.OrderId;

然后在 aspx.cs 页面上我想查询数据库 table 我做了以下操作:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["CustID"] != null)
        {
            int CID = (int)Session["CustID"];

            using (var myEntities = new Entities())
            {
                var CustName = (from customer in myEntities.Customer
                                where customer.CustomerId == (CID)
                                select customer.Name).SingleOrDefault();
                if (CustName == null) // error handling if customer name does not exist
                    throw new Exception("No such Customer found.");
                lblName.ForeColor = Color.Red;
                lblName.Text = CustName;
            }
        }
        if (Session["newOrderID"] != null)
        {
            int OID = (int)Session["CustID"];

            using (var myEntities = new Entities())
            {
                var OrderNum = (from order in myEntities.Orders
                                where order.OrderId == (OID)
                                select order.OrderId).SingleOrDefault();
                if (OrderNum == 0) // error handling if customer name does not exist
                    throw new Exception("No such Order found.");
                lblOrderID.ForeColor = Color.Red;
                lblOrderID.Text = OrderNum.ToString();
            }
        }

        DateTime date = DateTime.Now;
        DateTime DeliveryDate = date.AddDays(5);

        lblDate.ForeColor = Color.Red;
        lblDeliveryDate.ForeColor = Color.Red;

        lblDate.Text = date.ToLongDateString();
        lblDeliveryDate.Text = DeliveryDate.ToLongDateString();
    }

感谢各位提意见和建议。非常感激。