Linq to sql 可通过存储过程进行查询

Linq to sql 可通过存储过程进行查询,linq-to-sql,Linq To Sql,这是我的存储过程,它返回一个结果集。现在我必须在Linq中使用这个存储过程来应用一些WHERE条件来搜索firstname、lastname等 如何在具有其他where子句的linq中使用此存储过程?如果使用sqlmetal生成linq2sql实体,请使用/sprocs选项重新运行它以包含存储过程。然后,在datacontext上应该有一个名为SP_GET_RESEARCH_SITES的函数,该函数将调用存储过程并返回entityset 不幸的是,在Visual Studio中生成linq2sq

这是我的存储过程,它返回一个结果集。现在我必须在Linq中使用这个存储过程来应用一些
WHERE
条件来搜索firstname、lastname等


如何在具有其他where子句的linq中使用此存储过程?

如果使用sqlmetal生成linq2sql实体,请使用/sprocs选项重新运行它以包含存储过程。然后,在datacontext上应该有一个名为SP_GET_RESEARCH_SITES的函数,该函数将调用存储过程并返回entityset


不幸的是,在Visual Studio中生成linq2sql时,我不知道如何设置此选项,但我确信该选项在某个地方:)

存储过程是一种生成代码,可能会将表作为其结果集提供,但是您不能在其末尾添加where子句。如果将存储过程更改为表值函数,则可以将其视为一个表,添加任何where、sort、top和skip都会在函数调用的末尾附加SQL,从而使SQL server进行筛选并更高效地执行

CREATE PROCEDURE SP_GET_RESEARCH_SITES 
AS 
   SELECT
      s.SITE_ID, Site_NAme,
      s.PHONE, s.FAX, s.EMAIL_ID, s.IS_ACTIVE,
      LOCATION_ID, LOCATION_NAME,
      (select FIRST_NAME  from VCT_CONTACTS where CONTACT_ID in
          (select spd.ADMINISTRATOR_ID 
           from VCT_SPONSOR_SITE_PRO_LINKING spl 
           join VCT_SITE_PROTOCOL_DETAILS spd on spl.PR_SPONSOR_ID = spd.PR_SPONSOR_ID
           where spl.LOCATION_ID = sl.LOCATION_ID and SPL.SITE_ID=s.SITE_ID)
      ) as FIRSTNAME,
      (select MIDDLE_NAME  from VCT_CONTACTS where CONTACT_ID in
          (select spd.ADMINISTRATOR_ID 
           from VCT_SPONSOR_SITE_PRO_LINKING spl 
           join VCT_SITE_PROTOCOL_DETAILS spd on spl.PR_SPONSOR_ID = spd.PR_SPONSOR_ID 
           where spl.LOCATION_ID = sl.LOCATION_ID and SPL.SITE_ID=s.SITE_ID)
      ) as MIDDLENAME,
      (select LAST_NAME  from VCT_CONTACTS where CONTACT_ID in
          (select spd.ADMINISTRATOR_ID 
           from VCT_SPONSOR_SITE_PRO_LINKING spl 
           join VCT_SITE_PROTOCOL_DETAILS spd on spl.PR_SPONSOR_ID = spd.PR_SPONSOR_ID 
           where spl.LOCATION_ID = sl.LOCATION_ID and SPL.SITE_ID=s.SITE_ID)
      ) as LASTNAME
   FROM
      VCT_SITES s 
   left join VCT_SITE_LOCATIONS sl on s.SITE_ID = sl.SITE_ID