Mas*_*son 53 lambda entity-framework join
似乎有不同的方法使用linq进行连接.一个更直接,只涉及加入这样的表:
var found = from c in s.categories
join cm in s.categorymaps on c.CategoryId equals cm.ChildCategoryId
select c;
Run Code Online (Sandbox Code Playgroud)
还有另一种使用lambdas的方法,我有一段时间试图弄清楚如何使用这种语法加入.任何人都可以提供详细解释和大量示例的链接吗?或者只是简单地演示使用示例如何使用这种相当混乱的语法?
var x = _session.All<category>().Join<categorymap,category, ....
Run Code Online (Sandbox Code Playgroud)
RPM*_*984 141
通常我更喜欢LINQ的lambda语法,但是Join我更喜欢查询语法的一个例子 - 纯粹是为了可读性.
尽管如此,这里相当于您的上述查询(我认为,未经测试):
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
Run Code Online (Sandbox Code Playgroud)
您可能不得不根据要返回的内容来调整投影,但这就是它的主旨.
Jak*_*cki 13
你可以在这里找到几个例子:
Run Code Online (Sandbox Code Playgroud)// 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 join method syntax'.