实体框架SQL
本文关键字:SQL 框架 实体 | 更新日期: 2023-09-27 18:01:51
我希望任何人都能帮助我。
如何在c#的实体框架中建立这样的查询。
我的SQL查询是这样的:
select Id, dbo.AccessRight(Id, 5)
from Customers
where Id in (select top 10000 Id
from Customers
where dbo.AccessRight(Id, 5) > 0)
第二个select语句应该在代码中替换为一个id列表。
IEnumerable<YourTypeHere> myIEnumerable = dbContext.Database.SqlQuery<YourTypeHere>(sqlQueryHere);
或
List<YourTypeHere> myList = dbContext.Database.SqlQuery<YourTypeHere>(sqlQueryHere).ToList();
应该可以
您的AccessRight
似乎是一个用户定义的函数。
如果是这样的话,那么你就只能调用context.Database.SqlQuery<T>(YourSQL)
了,因为EF不支持用户定义的函数。
更新:你问的是What if you have the id list?
。假设您有一个ids
列表。
from c in Customer
where ids.Contains(c.Id)
select c
但是,还不能运行dbo.AccessRight(Id, 5)
用户定义函数来显示您的选择结果。
实际上可以
原谅我以前的无知。你可以用EF调用用户定义的函数。
在数据库上下文中,您可以做这样的事情(这段代码实际上是由EF EDMX工具生成的,尽管为了简单起见,我删除了一些东西):
public virtual ObjectResult<usp_GetAppropriatenessQuestionsWithMetadata_Result> usp_GetAppropriatenessQuestionsWithMetadata(Nullable<int> languageId)
{
var languageIdParameter = languageId.HasValue ?
new ObjectParameter("LanguageId", languageId) :
new ObjectParameter("LanguageId", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<usp_GetAppropriatenessQuestionsWithMetadata_Result>("usp_GetAppropriatenessQuestionsWithMetadata", languageIdParameter);
}