最近、「インターフェイス メンバー ..... のマッピングはサポートされていません」というエラーが発生しましたが、このスレッドに基づいて解決しました。デモンストレーションするには:
public interface IMyInterface { string valueText { get; set; } }
public class MyData : IMyInterface
{
int ID { get; set;}
string valueText { get; set;}
}
public class MyOtherData : IMyInterface
{
long ID { get; set;}
string valueText { get; set;}
}
と
public static IEnumerable<T> GetByValue<T>(string value) : where T : class, IMyInterface, new()
{
using (var context = new DataContext())
{
// The important line
return context.GetTable<T>().Where(x => x.valueText == value);
}
}
このコードを実行すると、「インターフェイス メンバー IMyInterface.valueText のマッピングはサポートされていません」という NotSupportedException が発生します。ただし、 を に置き換えるx.valueText == value
とx.valueText.Equals(value)
、これは完全に期待どおりに機能します。
コードでこれを解決しましたが、なぜこのように動作するのかを理解したいです。誰でも説明できますか?
更新:以下の私のコメントによると、LINQ to SQL チームはこれを「修正しない」として終了しました。これは、既知のバグとしてカウントされるようになったことを意味すると思いますが、すぐには解決されません。ただし、そもそもなぜ動作が異なるのかを知りたいと思います。