我如何使用 LINQ Select 一个超过 2 个表的 IEnumerable
How can I Select an IEnumerable over 2 Tables using LINQ
给定 3 个业务对象:
public class A
{
public long Id { get; set; }
}
public class B
{
public long ClassCId { get; set; }
public string ClassBFirstString { get; set; }
}
public class C
{
public long Id { get; set; }
public long ClassAId { get; set; }
}
和一个方法:
public IEnumerable<A> GetAllAbyClassBFirstStringFunction(string strg)
{
}
我想 select A 的所有对象都使用 LINQ 在对象 C 和 Class B 的字符串(ClassBFirstString
) 等于方法参数 (strg
).
我可以使用 2 个入口点
第一个是一个 IEQueryable<A>
拥有 A 的所有对象我们称它为 _allObjectsOfA
第二个是一个 IEQuaryable<B>
拥有 B 的所有对象我们称它为 _allObjetsOfB
根据上面的方法如何做到这一点?
鉴于此模型:
List<A> ListOfA = new List<A>()
{
new A { Id = 1 }, new A { Id = 2 }, new A { Id = 3 }
};
List<B> ListOfB = new List<B>()
{
new B { ClassCId = 10, ClassBFirstString = "a"},
new B { ClassCId = 11, ClassBFirstString = "b"},
new B { ClassCId = 12, ClassBFirstString = "c"}
};
List<C> ListOfC = new List<C>()
{
new C { Id = 10, ClassAId = 1},
new C { Id = 11, ClassAId = 1},
new C { Id = 11, ClassAId = 3},
new C { Id = 12, ClassAId = 3}
};
此方法的实现 IEnumerable<A> GetAllAbyClassBFirstStringFunction
:
public static IEnumerable<A> GetAllAbyClassBFirstStringFunction(string strg)
{
var q = from a in ListOfA
join c in ListOfC on a.Id equals c.ClassAId
join b in ListOfB on c.Id equals b.ClassCId
where b.ClassBFirstString == strg
select a;
return q;
}
像这样调用时:
var q = GetAllAbyClassBFirstStringFunction("b");
return 结果如下:
[0] = {ConsoleApplication1.A}
与 Id = 1
[1] = {ConsoleApplication1.A}
与 Id = 3
给定 3 个业务对象:
public class A
{
public long Id { get; set; }
}
public class B
{
public long ClassCId { get; set; }
public string ClassBFirstString { get; set; }
}
public class C
{
public long Id { get; set; }
public long ClassAId { get; set; }
}
和一个方法:
public IEnumerable<A> GetAllAbyClassBFirstStringFunction(string strg)
{
}
我想 select A 的所有对象都使用 LINQ 在对象 C 和 Class B 的字符串(ClassBFirstString
) 等于方法参数 (strg
).
我可以使用 2 个入口点
第一个是一个 IEQueryable<A>
拥有 A 的所有对象我们称它为 _allObjectsOfA
第二个是一个 IEQuaryable<B>
拥有 B 的所有对象我们称它为 _allObjetsOfB
根据上面的方法如何做到这一点?
鉴于此模型:
List<A> ListOfA = new List<A>()
{
new A { Id = 1 }, new A { Id = 2 }, new A { Id = 3 }
};
List<B> ListOfB = new List<B>()
{
new B { ClassCId = 10, ClassBFirstString = "a"},
new B { ClassCId = 11, ClassBFirstString = "b"},
new B { ClassCId = 12, ClassBFirstString = "c"}
};
List<C> ListOfC = new List<C>()
{
new C { Id = 10, ClassAId = 1},
new C { Id = 11, ClassAId = 1},
new C { Id = 11, ClassAId = 3},
new C { Id = 12, ClassAId = 3}
};
此方法的实现 IEnumerable<A> GetAllAbyClassBFirstStringFunction
:
public static IEnumerable<A> GetAllAbyClassBFirstStringFunction(string strg)
{
var q = from a in ListOfA
join c in ListOfC on a.Id equals c.ClassAId
join b in ListOfB on c.Id equals b.ClassCId
where b.ClassBFirstString == strg
select a;
return q;
}
像这样调用时:
var q = GetAllAbyClassBFirstStringFunction("b");
return 结果如下:
[0] = {ConsoleApplication1.A}
与 Id = 1
[1] = {ConsoleApplication1.A}
与 Id = 3