繁体   English   中英

"DbFunctions,是在给定上下文中无效的类型"

[英]DbFunctions, is a type which is not valid in the given context

我尝试使用SqlServerDbFunctionsExtensions.DateDiffDay<\/code>但DbFunctions _<\/code>说

CS0119:DbFunctions 是在给定上下文中无效的类型

我也尝试了以下但我得到了同样的错误

看看这些文档<\/a>

提供在 LINQ to Entities 查询中使用时转换为数据库函数的 CLR 方法。 在其他上下文(例如 LINQ to Objects)中调用这些方法将引发 NotSupportedException。

您只能在 linq 中访问它以进行实体查询,而不能做您想做的事情。

这是一个扩展方法,你不能传入它。

在 DateDiffDay

你在查询中像这样使用它 DateDiffDay(starDate, EndDate)

DateDiffDay是一种扩展方法 您使用对象实例调用它,然后将没有该对象的参数作为第一个参数传递。 在你的情况下:

EF.Functions.DateDiffDay(DateTime.Now, i.InvoiceDate) + i.ProductNav.GracePeriod.GetValueOrDefault();

您可能需要添加 using 指令:

using Microsoft.EntityFrameworkCore;

以及所需的 nuget 包

其他答案是您通常做的,但我认为值得指出的是,它们暗示扩展方法是某种神奇的东西,只能以某种方式调用,这真的不是真的

没有什么能阻止您调用扩展方法,就好像它是任何普通的静态方法一样; 您只需提供一些实例即可将其作为第一个参数调用

这是一个扩展方法:

public static string NoL(this string x){
  return x.Replace("l","");
}

请注意第一个参数的this ,使其成为扩展。 您可以将其称为“在字符串上”或将其传递给字符串:

var hw = "Hello World";

var heoword1 = hw.NoL());
var heoword2 = Ext.NoL(hw);

可能在所有情况下,您都会使用第一种形式,因为存在静态方法扩展以使代码更加紧凑和可读,但是从技术上讲,您尝试调用您所做的方法没有任何问题,您只是没有提供有效的 first范围。 这会起作用:

SqlServerDbFunctionsExtensions.DateDiffDay(EF.Functions, DateTime.Now, i.Invoicedate) 

EF.Functions 是您通常只需调用 DateDiff 的实例:

EF.Functions.DateDiff(DateTime.Now, i.Invoicedate) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM