方法链接相当吗?

Ed *_*nek 2 c# linq lambda linq-to-sql


这工作正常(从初始测试).
由于方法链接是我的首选格式,我试图弄清楚链接等效方法是什么,但没有运气.有任何想法吗?

var data = (from p in db.Persons
            from c in db.Companies
            where c.CompanyName == companyName && p.CompanyId == c.CompanyId
            select p)
            .Select(p => new
            {
                Id = p.PersonId,
                Name = string.Format("{0} {1}", p.FirstName, p.LastName)
            });
Run Code Online (Sandbox Code Playgroud)

谢谢, -
埃德

Ahm*_*eed 6

我会重新排序查询以过滤掉第companyName一个,然后执行连接.这将允许您使用这种流畅的语法:

var query = db.Companies.Where(c => c.CompanyName == companyName)
              .Join(db.Persons, c => c.CompanyId, p => p.CompanyId, (p, c) => p)
              .Select(p => new
              {
                  Id = p.PersonId,
                  Name = string.Format("{0} {1}", p.FirstName, p.LastName)
              });
Run Code Online (Sandbox Code Playgroud)

话虽如此,在查询语法中编写查询要容易得多,为什么要限制自己呢?复杂的连接在查询语法中通常更好,你也可以使用SelectMany连接格式from ... from...而不是join p in ... on x equals y.有关更多详细信息,请参阅此问题:何时优先使用SelectMany()表示的连接超过Linq中使用join关键字表示的连接.