我如何克服“;无法创建类型为..的常数值";简单WHERE语句的异常

本文关键字:常数值 quot 异常 语句 WHERE 简单 类型 何克服 克服 创建 | 更新日期: 2023-09-27 18:26:59

我使用的EF具有以下定义:

public class StoredFile
{
    public int StoredFileId { get; set; }
    public HashCode HashCode { get; set; }
    public string LocalName { get; set; }
    //and some more fields here...
}

[ComplexType]
public class HashCode
{
    public Byte [] ValueArr {get; set;}
    public override bool Equals(object o) {...}
    //some more methods to manipulate hash codes                
}

我正在尝试让以下查询工作:

    public bool TryGetFileInfo(MachineSafeDbDataContext dataContext, HashCode hash, out StoredFile fileInfo)
    {
        var matches = from curr in dataContext.StoredFiles where (hash.Equals(curr.HashCode)) select curr;
        if (matches.Count() == 0)
        {
            fileInfo = null;
            return false;
        }
        fileInfo = matches.First();
        return true;
    }

然而,我得到了"无法创建类型为…的常量值"的异常。我想LINQ找不到上面WHERE语句的SQL转换。

我知道以下问题:实体框架-";无法创建类型为的常量值"例外,以及Microsoft的下一页:LINQ to Entities中的已知问题和注意事项。然而,我仍然希望根据其哈希代码从数据库中选择一个文件。

谢谢,

编辑:我应该越过L2E的限制。这个线程有一些好的指针和链接。

我如何克服“;无法创建类型为..的常数值";简单WHERE语句的异常

您不能在L2E中调用被覆盖的.Equals()

但是,您可以直接深入ValueArr

var matches = from curr in dataContext.StoredFiles 
              where (curr.HashCode.ValueArr == hash.ValueArr) 
              select curr;