entity framework使用连接方法和lambdas进行连接

看来有不同的方式来使用linq进行连接。 一个更简单,只需要join如下表格:

var found = from c in s.categories join cm in s.categorymaps on c.CategoryId equals cm.ChildCategoryId select c; 

还有另外一种使用lambdaexpression式的方式,我正在试图弄清楚如何使用这个语法来连接。 任何人都可以提供详细的解释和大量的例子的链接? 或者只是简单地演示如何使用这个相当混乱的语法示例?

 var x = _session.All<category>().Join<categorymap,category, .... 

通常我更喜欢LINQ的lambda语法,但是Join是一个我喜欢查询语法的例子 – 纯粹是为了可读性。

尽pipe如此,这是相当于你的上面的查询(我认为,未经testing):

 var query = db.Categories // source .Join(db.CategoryMaps, // target c => c.CategoryId, // FK cm => cm.ChildCategoryId, // PK (c, cm) => new { Category = c, CategoryMaps = cm }) // project result .Select(x => x.Category); // select result 

你可能不得不根据你想要返回的方式来调整投影,但这是它的主题。

你可以在这里find几个例子:

 // Fill the DataSet. DataSet ds = new DataSet(); ds.Locale = CultureInfo.InvariantCulture; FillDataSet(ds); DataTable contacts = ds.Tables["Contact"]; DataTable orders = ds.Tables["SalesOrderHeader"]; var query = contacts.AsEnumerable().Join(orders.AsEnumerable(), order => order.Field<Int32>("ContactID"), contact => contact.Field<Int32>("ContactID"), (contact, order) => new { ContactID = contact.Field<Int32>("ContactID"), SalesOrderID = order.Field<Int32>("SalesOrderID"), FirstName = contact.Field<string>("FirstName"), Lastname = contact.Field<string>("Lastname"), TotalDue = order.Field<decimal>("TotalDue") }); foreach (var contact_order in query) { Console.WriteLine("ContactID: {0} " + "SalesOrderID: {1} " + "FirstName: {2} " + "Lastname: {3} " + "TotalDue: {4}", contact_order.ContactID, contact_order.SalesOrderID, contact_order.FirstName, contact_order.Lastname, contact_order.TotalDue); } 

或者只是谷歌'linq连接方法语法'。