相关疑难解决方法(0)

如何使用带有linq的标量值函数实体?

可能重复:
SQL级别函数可以用于LINQ to Entity查询吗?

我有一个标量函数,可以获得两点之间的距离,我想用它来查询最接近的记录点.标量函数与linq一起使用到sql但是在EF中失败

标量函数

USE [GeoData]
GO

/****** Object:  UserDefinedFunction [dbo].[DistanceBetween]    Script Date: 09/18/2012 19:40:44 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



CREATE FUNCTION [dbo].[DistanceBetween](@Lat1 as real,
@Long1 as real, @Lat2 as real, @Long2 as real)
RETURNS real
AS
BEGIN

DECLARE @dLat1InRad as float(53);
SET @dLat1InRad = @Lat1;
DECLARE @dLong1InRad as float(53);
SET @dLong1InRad = @Long1;
DECLARE @dLat2InRad as float(53);
SET @dLat2InRad = @Lat2;
DECLARE @dLong2InRad as float(53);
SET @dLong2InRad = @Long2 ;

DECLARE @dLongitude as …
Run Code Online (Sandbox Code Playgroud)

c# sql linq-to-entities entity-framework

9
推荐指数
1
解决办法
2万
查看次数

在LINQ to Entities查询中调用自定义标量数据库函数?

有没有办法可以将自定义标量数据库函数称为LINQ to Entities查询的一部分?我在网上唯一能找到的就是这个页面:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/language-reference/how-to-call-custom-database-functions

但是,此处给出的说明似乎假设您使用的是DB-first方法并讨论修改.edmx文件.如果您使用代码优先方法呢?我希望能够写出这样的东西:

var result = await (
    from itm in _itemDataContext.Items
    where
        itm.QryGroup1 == "Y" &&
        _itemDataContext.Dbo_MyCustomScalarIntFn(itm.QryGroup2) > 0
).ToArrayAsync();
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server entity-framework ef-code-first

7
推荐指数
1
解决办法
640
查看次数

EF6 中仍然支持模型定义的函数吗?

这里讨论模型定义的函数:

EF6.1.2 支持这些吗?

我正在逐步完成 Edm/DbModel 的内容,但我一生都无法弄清楚 csdl 中的 <Function> 元素应该在哪里进行解析,因为它没有将其放入 EdmModel (EdmModel.AddItem( EdmFunction) 没有被调用)

ExpressionConverter.FindFunction 在 EdmModel._functions 中查找,并且 _functions 仅由 EdmModel.AddItem(EdmFunction) 添加,并且仅由扩展方法 EdmModelExtensions.AddFunction() 调用,并且我在 EntityFramework 源代码中找不到调用该函数的任何位置。我一定错过了一些简单的东西......

更多:我放弃了在 edmx 中定义函数,现在我以编程方式创建 EdmFunction 并将其添加到自定义 IConceptualModelConvention.Apply() 方法中:

    class CustomFunctionConvention : IConceptualModelConvention<EdmModel>
    {
        public void Apply(EdmModel item, DbModel model)
        {
            var functionPayload = new EdmFunctionPayload () {
                CommandText = "CAST (strValue AS int)",
                Parameters = new [] {
                    FunctionParameter.Create("strValue", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String).GetEdmPrimitiveType(), ParameterMode.In),
                },
                ReturnParameters = new [] { …
Run Code Online (Sandbox Code Playgroud)

ado.net entity-framework ado.net-entity-data-model

6
推荐指数
1
解决办法
1697
查看次数