来自链接到值的另一个列表的C#值

时间:2016-06-27 17:30:28

标签: c# linq

我试图从List获取productname,它使用LINQ匹配List的Productid,但我没有运气。

ProductID在两个列表中,它应该以某种方式链接。

我试过了:

Product product = products.FirstOrDefault(x => x.ProductName == orderDetail.ProductID);


        List<orderDetail> orderDetails = Database.getOrderDetails();
        List<Product> products = Database.getProducts();

        textBox1.Text = Convert.ToString(orderDetail.OrderID);
        textBox2.Text = Convert.ToString(Productname);
        textBox3.Text = Convert.ToString(orderDetail.UnitPrice);
        textBox4.Text = Convert.ToString(orderDetail.Quantity);
        textBox5.Text = Convert.ToString(orderDetail.Discount);

3 个答案:

答案 0 :(得分:2)

我认为你想要这样的东西,但是产品和订单对象的结构并不是很清楚。 (你也可能想要一些空检查。)

OrderDetails orderDetails = Database.GetOrderDetails().First();
List<Product> products = Database.GetProducts();

var name = products.First(p => p.ProductID == orderDetails.ProductID).ProductName;

答案 1 :(得分:0)

为什么在这里将x.ProductNameorderDetail.ProductID进行匹配:Product product = products.FirstOrDefault(x => == orderDetail.ProductID);? 如果您尝试使用与orderDetail的ProductID匹配的产品列表中的产品,您只需要这样做:

Product product = products.FirstOrDefault(x => x.ProductID == orderDetail.ProductID);

当然,如果ProductorderDetail对象的类都具有相同的.ProductID属性。 或者我错过了一些东西?

答案 2 :(得分:-2)

修改先前的查询,我知道您需要如下结果。          此查询将返回列表中存在productid的所有产品名称。          我们有两种方法可以实现这个结果集。

List<orderDetail> orderDetails = Database.getOrderDetails();
List<Product> products = Database.getProducts();

// This is a SQL like query 
var productNames =  from ord in orderDetails 
join pr in products 
on ord.ProductID equals pr.ProductID 
select pr.ProductName;

Alternativey, You can also use `Join()`

//This is extention method query
var productNames = orderDetails.Join(products, 
ord => ord.ProductID,
                       pr => pr.ProductID, 
(orderdetail, productdetail) =>  productdetail.ProductName);