Linq从2列表中获取具有一个唯一ID的值

时间:2017-12-20 08:17:33

标签: c# linq

我有一个要绑定的课程。

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
}

现在,这个类将从不同的表中获取值,但它们具有共同的ID。

这是我在循环中获得的列表。

var List1 = item.TicketTypes.Where(m => m.PerformanceID == item.Id)
                    .Select(t => new { t.Name, t.ID});

var List2 = item.Pricies.Where(m => m.PerformanceID == item.Id)
                    .Select(t => new { t.Price, t.ID });
  

item是每个循环实例的对象。

我想要的是,

我希望MyClass列表按其ID填写实体名称和价格。

3 个答案:

答案 0 :(得分:2)

这里没有太多信息供我测试,但我有这个建议:

// Make sure to add a constructor to MyClass
var List1 = item.TicketTypes.Where(m => m.PerformanceID == item.Id)
                            .Select(t => new MyClass(t.Name, t.ID, item.Pricies.FirstOrDefault(p => p.PerformanceID == t.ID).Price));

这应该会给你想要的结果,但就像我说我没有足够的信息来测试这个,所以一定要注意这些问题,以便我们可以将它们组合在一起。

答案 1 :(得分:1)

在Linq声明中,如果我的假设是正确的(无法测试):

var result= from t1 in item.TicketTypes
            join t2 in item.Pricies on t1.ID equals t2.ID
            select new MyClass() { Id = t1.ID, Name = t1.Name, Price = t2.Price };

如果您需要列表

,请使用.ToList()

答案 2 :(得分:1)

试试这个:

var query = List1.Join(List2, l1 => l1.Id, l2 => l2.Id, (l1, l2) => new { ID = l1.Id, Name = l1.Name, Price = l2.Price });


foreach (var obj in query)
{
    Console.WriteLine("{0} - {1} - {2}", obj.ID, obj.Name, obj.Price);
}