C# SQL到LINQ内部联接
有人能帮我在实体框架linq中形成下面的SQL查询吗 AccountApplication表有两个FK: AccountApplication[AccountId]->Account[AccountId] 及 AccountApplication[ApplicationId]->Application[ApplicationId]C# SQL到LINQ内部联接,c#,sql-server,entity-framework,linq,C#,Sql Server,Entity Framework,Linq,有人能帮我在实体框架linq中形成下面的SQL查询吗 AccountApplication表有两个FK: AccountApplication[AccountId]->Account[AccountId] 及 AccountApplication[ApplicationId]->Application[ApplicationId] 从发票a内部联接帐户应用程序b中选择* 在b.AccountId=3和b.ApplicationId=a.ApplicationId上 我没有EF中可用的Accoun
从发票a内部联接帐户应用程序b中选择*
在b.AccountId=3和b.ApplicationId=a.ApplicationId上
我没有EF中可用的AccountApplication实体表
我想要的是属于给定帐户id有权访问的应用程序的发票列表。accountid的applicationid之间的关系在AccountApplication表中
具有导航属性,非常简单
var query = db.Invoices.Where(invoice => invoice.Application.Account
.Any(account => account.AccountId == 3));
我希望您现在明白为什么它们被称为导航属性。在查询中,您使用它们来“导航”(访问)所需的数据,EF使用它们作为元数据来生成必要的联接。我在EF中没有可用的AccountApplication entity表。为什么?为什么“我没有EF中可用的AccountApplication实体表。”?您可以在LINQ中为此使用联接。EntityFramework在表之间使用FK时会自动创建一些引用对象。因此,在发票上,我直接引用了应用程序表中的应用程序对象。这将自动创建,并跳过实际的引用表。uhmThanks Gert,添加了一个EF类屏幕,该屏幕还显示导航属性!谢谢这就是领路人。在我的例子中,我不得不做一些类似于db.Invoice.Where(x=>x.Application.Account.FirstOrDefault().AccountId==AccountId)的事情对不起,我错过了。因此,它是多对多关系和应用程序。帐户是一个集合。在这种情况下,FirstOrDefault()
不好,因为它会随机选择一个帐户,您需要使用Any(…)
-我会更新答案。只是一个友好的建议——下次遇到类似问题时,请发布实体类而不是图表。
var records= (from a in context.Invoices join b in context.AccountApplication
on a.accountId equals b.accountId
where b.accountId==3
select new {a.Id,b.Id,....etc});