如何使用Entity Framework 6.1 Code First选择数据库标量函数结果作为列?这是纯SQL查询:
SELECT
Id AS Id
, Name AS Name
, dbo.GetAdditionalInfo(Id) AS AdditionalInfo
FROM Users
WHERE Status = 1
数据库函数dbo.GetAdditionalInfo(INT Id)
从其他表中收集信息并返回VARCHAR
结果。如何使用EF 6.1做到这一点?我需要这样的东西:
var usersList = ctx.Users
.Where(n=>n.Status == 1)
.Select(n=>new{
Id = n.Id
, Name = n.Name
, AdditionalInfo = ctx.DataBase.GetScalarFunctionResult<string>("dbo.GetAdditionalInfo (@)", n.Id)
}).ToList();
当然,
ctx.DataBase.GetScalarFunctionResult<T>(string ScalarFunctionName, params object args)
不存在且不起作用。但如果实施的话,它可能非常有用且易于使用。
答案 0 :(得分:1)
您可以尝试如下所示。
命名空间: using System.Data.Entity.SqlServer
var usersList = ctx.Users
.Where(n=>n.Status == 1)
.Select(n=>new{
Id = n.Id, Name = n.Name,
AdditionalInfo = ctx.Database.SqlQuery<string>(yourQuery, parameters).FirstOrDefault()
}).ToList();
答案 1 :(得分:1)
看来,你想要实现的目标在这里描述Entity Framework 6 Code First Custom Functions。它需要一个额外的库,因为看起来EF6不支持使用Code-first开箱即用(Calling a SQL User-defined function in a LINQ query)来调用UDF。
答案 2 :(得分:0)
您可以尝试这个(假设该类继承自DBContext):
String decryptedValue = String.Empty;
try {
List<SqlParameter> parametros = new List<SqlParameter>();
parametros.Add((new SqlParameter("@Data", value) {
SqlDbType = System.Data.SqlDbType.VarBinary }));
parametros.Add((new SqlParameter("@KeyValue", key) {
SqlDbType = System.Data.SqlDbType.VarChar }));
String v = null;
v = this.Database.SqlQuery<String>(
"SELECT SEGURIDAD.FN_Get_DecryptionData(@Data,@KeyValue)", parametros.ToArray()).FirstOrDefault();
decryptedValue = v;
} catch(Exception ex) {
}