Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL到LINQ内部联接_C#_Sql Server_Entity Framework_Linq - Fatal编程技术网

C# SQL到LINQ内部联接

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

有人能帮我在实体框架linq中形成下面的SQL查询吗

AccountApplication表有两个FK:

AccountApplication[AccountId]->Account[AccountId]

AccountApplication[ApplicationId]->Application[ApplicationId]

从发票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});