Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态Linq帮助,不同的错误取决于作为参数传递的对象?_Linq_Linq To Sql_Generics_Where Clause_Dynamic Linq - Fatal编程技术网

动态Linq帮助,不同的错误取决于作为参数传递的对象?

动态Linq帮助,不同的错误取决于作为参数传递的对象?,linq,linq-to-sql,generics,where-clause,dynamic-linq,Linq,Linq To Sql,Generics,Where Clause,Dynamic Linq,我有一个实体DAO,它由我的每个对象DAO固有。我正在使用动态Linq,并试图让一些通用查询正常工作 我在EntityDao的泛型方法中有以下代码: public abstract class EntityDao<ImplementationType> where ImplementationType : Entity { public ImplementationType getOneByValueOfProperty(string getProperty, object

我有一个实体DAO,它由我的每个对象DAO固有。我正在使用动态Linq,并试图让一些通用查询正常工作

我在EntityDao的泛型方法中有以下代码:

public abstract class EntityDao<ImplementationType> where ImplementationType : Entity
{ 
    public ImplementationType getOneByValueOfProperty(string getProperty, object getValue){
    ImplementationType entity = null;
    if (getProperty != null && getValue != null) 
    {
        LCFDataContext lcfdatacontext = new LCFDataContext(); 
         //Generic LINQ Query Here
         entity = lcfdatacontext.GetTable<ImplementationType>().Where(getProperty + " =@0", getValue).FirstOrDefault();
         //.Where(getProperty & "==" & CStr(getValue))
     }

 //lcfdatacontext.SubmitChanges()
 //lcfdatacontext.Dispose()

return entity;
}
上述过程(完成类型与完成有关系)

上述两项工作。但是,

 Accomplishment result = accomplishmentDao.getOneByValueOfProperty
    ("Id", New Guid("95457751-97d9-44b5-8f80-59fc2d170a4c"));
不起作用,并表示:

Operator '=' incompatible with operand types 'Guid' and 'Guid
interface IEqualitySignatures : IRelationalSignatures
{
    void F(bool x, bool y);
    void F(bool? x, bool? y);
    void F(Guid x, Guid y);
    void F(Guid? x, Guid? y);
}
为什么会这样?无法比较Guid?我也尝试了
==
,但出现了相同的错误。更令人困惑的是,我看到的每个动态Linq示例都只是使用字符串,无论是使用参数化的where谓词还是我注释掉的这个:

//.Where(getProperty & "==" & CStr(getValue))
无论是否使用Cstr,许多数据类型都不能使用这种格式。我尝试将getValue设置为字符串,而不是对象,但随后出现了不同的错误(例如,多字字符串在第一个字之后会停止比较)


我缺少什么使它能够与guid和/或任何数据类型一起工作?理想情况下,我希望能够为getValue传入一个字符串(就像我在其他动态LINQ示例中看到的那样),而不是对象,并让它在不考虑列的数据类型的情况下工作。

Welp我发现,动态LINQ最初不支持GUI的比较(太愚蠢了!)。我发现了一个小新闻:

您只需进入编辑Dynamics.cs,将IEqualitySignatures界面替换为以下内容:

Operator '=' incompatible with operand types 'Guid' and 'Guid
interface IEqualitySignatures : IRelationalSignatures
{
    void F(bool x, bool y);
    void F(bool? x, bool? y);
    void F(Guid x, Guid y);
    void F(Guid? x, Guid? y);
}

现在,我的getOneByValueOfProperty一直在工作

对于Guid这应该可以:

.Where(getProperty + ".Equals(@0)", getValue);
(注意参数getValue的类型应为Guid