c#-ASP.NET MVC6“未定义二进制运算符Equal”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-ASP.NET MVC6“未定义二进制运算符Equal”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1553字,纯文字阅读大概需要3分钟。
内容图文
![c#-ASP.NET MVC6“未定义二进制运算符Equal”](/upload/InfoBanner/zyjiaocheng/667/c477c58f90cd4281b094d26785a93c1c.jpg)
我有这个模型:
[Table("tblDbFile")]
public class DbFile
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public string Engine { get; set; }
public string Hash { get; set; }
public long Size { get; set; }
public DbDir Directory { get; set; }
}
[Table("tblDbDir")]
public class DbDir
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public DbDir Parent { get; set; }
}
如果我尝试执行_context.DbFile.Where行(n => n.Directory == Dir),则会出现此错误:
(Dir是DbDir类型的)
信息:
InvalidOperationException: The binary operator Equal is not defined for the types ‘System.Nullable`1[System.Guid]’ and ‘Models.DbDir’.
我该如何解决?使用_context.DbFile.Where(n => n.Directory.Id == Dir.Id)可以,但这对我来说不是一个选择,因为首先,我必须大量使用这些类型的引用,其次,Dir可以为空.
我已经尝试过:
>覆盖对象的==和!=运算符,这确实有效,但是它不再优化SQL查询,而是在C#中进行比较.
>试图将Dir声明为DbDir? (失败)
>使用n.Directory.Equals(Dir)(与覆盖==相同的问题)
>在表达式中使用Dir ??.Id(失败)
解决方法:
如您所见,查询生成器无法转换您的运算符.您必须使用自己不喜欢的版本:
_context.DbFile.Where(n => n.Directory.Id == Dir.Id)
是的,这在无效情况下是有问题的.所以…在这种情况下,您将需要用不同的方式编写:
if(Dir == null) {
query = _context.DbFile.Where(n => n.Directory == null);
}
else {
query = _context.DbFile.Where(n => n.Directory.Id == Dir.Id);
}
作为旁白;如果您还有n.DirectoryId,则可以方便地使用它:
if(Dir == null) {
query = _context.DbFile.Where(n => n.DirectoryId == null);
}
else {
var id = Dir.Id;
query = _context.DbFile.Where(n => n.DirectoryId == id);
}
内容总结
以上是互联网集市为您收集整理的c#-ASP.NET MVC6“未定义二进制运算符Equal”全部内容,希望文章能够帮你解决c#-ASP.NET MVC6“未定义二进制运算符Equal”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。