我有多个班级列表。
public class MainClass
{
public List<A> a{ get; set; }
public List<B> b{ get; set; }
public List<C> c{ get; set; }
}
主要类包含以下属性
class A
{
public string Name{ get; set; }
public string MainAddress{get;set;}
}
class B
{
public int ID {get;set;}
public string Address{ get; set; }
}
class C
{
public int ID {get;set;}
public string Name{ get; set; }
}
现在我如何从列表b&amp;获取数据? c 并将其传递给 A 这是我试过的
List<A> query = (from b in MainClass.b
join c in Mainclass.c
on b.ID equals c.ID
select new {b.Address, c.Name});
如何在C中将名称显示为A
中的主要地址答案 0 :(得分:2)
如果我错了,请纠正我,但我认为你想要的是A列表中有来自c列表的MainAddresses。 如果是这样的话:
var query = (from b in MainClass.b
join c in Mainclass.c
on b.ID equals c.ID
select new A { MainAddress = c.Name });
修改强>: 我继续做了一个完整的工作示例,以便你可以检查你的错误......
当然,通过直接在Enumerable实例上调用ToList选择器,可以一步完成从Enumerable到List的转换。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var mainClass = new MainClass();
mainClass.b = new List<B>();
mainClass.c = new List<C>();
mainClass.b.Add(new B { ID = 1, Address = "B1" });
mainClass.c.Add(new C { ID = 1, Name = "C1" });
//using LINQ
var query = (from b in mainClass.b
join c in mainClass.c
on b.ID equals c.ID
select new A { MainAddress = c.Name });
List<A> fromLINQ = query.ToList();
//using anonymous functions aka lambda expressions
IEnumerable<A> enumerableFromAnonymous = mainClass.b.Join(mainClass.c, x => x.ID, x => x.ID, (x, y) => { return new A() { MainAddress = y.Name }; });
List<A> listFromAnonymous = enumerableFromAnonymous.ToList();
}
}
public class MainClass
{
public List<A> a { get; set; }
public List<B> b { get; set; }
public List<C> c { get; set; }
}
public class A
{
public string Name { get; set; }
public string MainAddress { get; set; }
}
public class B
{
public int ID { get; set; }
public string Address { get; set; }
}
public class C
{
public int ID { get; set; }
public string Name { get; set; }
}
}
答案 1 :(得分:2)
下面是演示代码的完整代码段:http://share.linqpad.net/aq8f6c.linq
要将B中的地址显示为A中的Mainadress,请执行以下操作:
var result = from a in As
join b in (from b in Bs
join c in Cs
on b.ID equals c.ID
select new {b.Address, c.Name})
on a.Name equals b.Name
select new A {
Name = a.Name,
MainAddress = b.Address
};
result
则为Ienumerable<A>
类型。
输出:
答案 2 :(得分:0)
我认为Serv的例子是正确的答案,但我不喜欢查询语法,因为我发现由于Visual Studio无法在即时窗口中支持Lambda表达式而难以阅读和维护 - 自VS2013起。
我更喜欢使用中间变量的方法语法。这节省了屏幕空间,我认为它更容易理解:
var query = from a in As
join c in (from b in Bs
join c in Cs
on b.ID equals c.ID
select new {b.Address, c.Name})
on a.Name equals c.Name
select new A {
Name = a.Name,
MainAddress = c.Address
};
query.Dump();
//method sytnax
var nameAddress = Bs.Join(Cs, b => b.ID, c => c.ID, (b, c) => new { Name = c.Name, Address = b.Address });
var query2 = As.Join(nameAddress, a => a.Name, na => na.Name, (a, na) => new { Name = a.Name, MainAddress = na.Address});
query2.Dump();