实体框架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列表。

实体框架SQL

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);
    }