Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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# 将Linq转换为SqlCommand_C#_Sql_Sql Server_Linq - Fatal编程技术网

C# 将Linq转换为SqlCommand

C# 将Linq转换为SqlCommand,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,SQL Server查询中此Linq查询的等效项是什么 存在以下用途: 除此之外,您的linq查询效率低下。为什么在包含之前使用Distinct?在使用“包含”之前,不必删除重复项 这更具可读性和效率: IEnumerable<Profile> profiles = am.Profile .Where(p => articles.Any(a => a.ProfileID == p.ProfileID)); 存在以下用途: 除此之外,您的linq查询效率低下。为什

SQL Server查询中此Linq查询的等效项是什么

存在以下用途:

除此之外,您的linq查询效率低下。为什么在包含之前使用Distinct?在使用“包含”之前,不必删除重复项

这更具可读性和效率:

IEnumerable<Profile> profiles = am.Profile
    .Where(p => articles.Any(a => a.ProfileID == p.ProfileID));
存在以下用途:

除此之外,您的linq查询效率低下。为什么在包含之前使用Distinct?在使用“包含”之前,不必删除重复项

这更具可读性和效率:

IEnumerable<Profile> profiles = am.Profile
    .Where(p => articles.Any(a => a.ProfileID == p.ProfileID));


您可以在SQL事件探查器中捕获查询。很可能它看起来很奇怪,人类永远不会写这样的东西,但你会得到idea@YuriyGalanter我认为OP没有使用linqToSql,因为它在sql server查询中表示等效的Linq查询,顺便说一下,标记分别是sql和Linq,假设这是Linq到实体或Linq到sql,如果您在LINQPad中尝试此查询并单击“SQL”选项卡,它将显示代码生成的SQL。@TimSchmelter:可能您是对的。这是我第一次使用linq。我在这本书中看到了这段代码:@StriplingWarrior:非常感谢。就这样。您可以在SQL分析器中捕获查询。很可能它看起来很奇怪,人类永远不会写这样的东西,但你会得到idea@YuriyGalanter我认为OP没有使用linqToSql,因为它在sql server查询中表示等效的Linq查询,顺便说一下,标记分别是sql和Linq,假设这是Linq到实体或Linq到sql,如果您在LINQPad中尝试此查询并单击“SQL”选项卡,它将显示代码生成的SQL。@TimSchmelter:可能您是对的。这是我第一次使用linq。我在这本书中看到了这段代码:@StriplingWarrior:非常感谢。就这样。谢谢你的回复。这是最简单的转换吗?@maru_a我不确定它是否是最有效的,但我确定它有多容易理解。当您从表中选择某些内容时,只需将它们放在select之后,然后通过键字段过滤WHERE子句中的记录。这就是我在使用SQL时经常使用的逻辑。为什么在EXISTS中使用DISTINCT?无论如何都不会选择列,因此您也可以使用EXISTSSELECT 1。。。或者选择空。。。取而代之的是。@TimSchmelter,我刚刚从LINQ Contains方法中翻译了它。然而,我意识到Damien的解决方案更短。我的这个解决方案看起来像林肯的逻辑。我猜ProfileId在Article表中不是唯一的。使用DISTINCT可以,为什么不可以?@KingKing:但是Exists和Contains并不关心dulicates。如果找到一个匹配的ProfileID就足够了,因此删除所有重复项只是效率低下。根据Damien的方法:我更喜欢Exists,因为IN/NOT IN在可空列中的行为不可预测。谢谢你的回复。这是最简单的转换吗?@maru_a我不确定它是否是最有效的,但我确定它有多容易理解。当您从表中选择某些内容时,只需将它们放在select之后,然后通过键字段过滤WHERE子句中的记录。这就是我在使用SQL时经常使用的逻辑。为什么在EXISTS中使用DISTINCT?无论如何都不会选择列,因此您也可以使用EXISTSSELECT 1。。。或者选择空。。。取而代之的是。@TimSchmelter,我刚刚从LINQ Contains方法中翻译了它。然而,我意识到Damien的解决方案更短。我的这个解决方案看起来像林肯的逻辑。我猜ProfileId在Article表中不是唯一的。使用DISTINCT可以,为什么不可以?@KingKing:但是Exists和Contains并不关心dulicates。如果找到一个匹配的ProfileID就足够了,因此删除所有重复项只是效率低下。根据Damien的方法:我更喜欢Exists,因为IN/NOT IN在可空列中的行为不可预测。
SELECT * FROM Profile
WHERE
EXISTS(SELECT DISTINCT ProfileId FROM Article WHERE ProfileId in (SELECT ProfileID FROM  Profile)) 
Select p.*
From [Profile] p
Where p.profileID In (
    Select Distinct ProfileId
    From [Article]
)
SELECT * FROM Profile P
WHERE EXISTS(
    SELECT 1 FROM Article A
    WHERE A.ProfileId = P.ProfileId
)
IEnumerable<Profile> profiles = am.Profile
    .Where(p => articles.Any(a => a.ProfileID == p.ProfileID));