日期:2014-05-17  浏览次数:20410 次

关于lambda表达式中group join的问题
表A:AID,NAME,TYPEID

表B:BID,NAME


假设表A和表B对应的实体分别为EA和EB,实体类中没有设置外键。
现要查询A.*,B.NAME AS TYPENAME

EA.GroupJoin(
EB, 
u => u.TYPEID, 
ui => ui.BID, 
(u, ui) => new { u, ui }).Select(o => o)

请问红字部分该怎么写?只查询目标字段,多的字段不要。

因为自己在尝试的过程中发现,u.AID,u.NAME,u.TYPEID,是没问题的,但是ui.NAME不行。
很奇怪,所以发帖求问,谢谢各位~

------解决方案--------------------
C# code
public partial class _Default : System.Web.UI.Page
{
    public class A
    {
        public string AID { get; set; }
        public string Name { get; set; }
        public string TypeId { get; set; }
    }

    public class B
    {
        public string BID { get; set; }
        public string Name { get; set; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        List<A> listA = new List<A>();
        listA.Add(new A { AID = "1", Name = "一号", TypeId = "1" });
        listA.Add(new A { AID = "2", Name = "二号", TypeId = "2" });
        listA.Add(new A { AID = "3", Name = "三号", TypeId = "3" });

        List<B> listB = new List<B>();
        listB.Add(new B { BID = "1", Name = "B一号" });
        listB.Add(new B { BID = "2", Name = "B二号" });

        var results = listA.GroupJoin(listB, a => a.TypeId, b => b.BID, (a, b) => new
        {
            a,
            BID = b.Max(o => o.BID),
            Name = b.Max(o => o.Name)
        }).Select(o => new
        {
            AID = o.a.AID,
            AName = o.a.Name,
            TypeId = o.a.TypeId,
            BID = o.BID,
            BName = o.Name
        });

        foreach (var item in results)
        {
            Response.Write(item.AID);
            Response.Write("     ");
            Response.Write(item.AName);
            Response.Write("     ");
            Response.Write(item.TypeId);
            Response.Write("     ");
            Response.Write(item.BID);
            Response.Write("     ");
            Response.Write(item.BName);
            Response.Write("<br/>");
        }
    }
}