objectDaos の全員が継承する entityDao があります。私は Dynamic 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;
}
次に、単体テストで次のメソッド呼び出しを行います (すべての objectDaos は entityDao を継承します)。
[Test]
public void getOneByValueOfProperty()
{
Accomplishment result = accomplishmentDao.getOneByValueOfProperty
("AccomplishmentType.Name", "Publication");
Assert.IsNotNull(result);
}
上記合格(AccomplishmentTypeは達成度に関係あり)
Accomplishment result = accomplishmentDao.getOneByValueOfProperty("Description", "Can you hear me now?");
Accomplishment result = accomplishmentDao.getOneByValueOfProperty("LocalId", 4);
上記の両方が機能します。でも、
Accomplishment result = accomplishmentDao.getOneByValueOfProperty
("Id", New Guid("95457751-97d9-44b5-8f80-59fc2d170a4c"));
動作せず、次のように言います。
Operator '=' incompatible with operand types 'Guid' and 'Guid
なぜこうなった?ガイドは比較できませんか?私も試し==
ましたが、同じエラーです。さらに紛らわしいのは、私が見た Dynamic Linq のすべての例は、パラメーター化された where 述語を使用するか、コメントアウトしたものを使用するかに関係なく、単純に文字列を使用していることです。
//.Where(getProperty & "==" & CStr(getValue))
Cstr の有無にかかわらず、多くのデータ型はこの形式では機能しません。getValue をオブジェクトではなく文字列に設定しようとしましたが、別のエラーが発生します (複数単語の文字列は最初の単語の後に比較を停止するなど)。
これを GUID や任意のデータ型で機能させるには何が欠けていますか? 理想的には、オブジェクトの代わりに (他のすべての動的 LINQ の例で見たように) getValue に文字列を渡すだけで、列のデータ型に関係なく機能するようにしたいと考えています。