1
protected void saveform<T>(System.Data.Linq.Table<T> table, bool submit) 
    where T : class
{
    try
    {
        using (DataContext dc = new DataContext())
        {
            var form = (from f in table
                        join r in dc.tbRecords on f.recordId equals r.recordId
                        where r.pID == pId
                        select new {f, r}).SingleOrDefault();
        ...

しかし、コンパイル時にこのエラーメッセージが表示されました:

「T」には「recordId」の定義が含まれておらず、タイプ「T」の最初の引数を受け入れる拡張メソッド「recordId」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

どうすればこれを処理できますか?ありがとう。

4

1 に答える 1

2

Tが'recordId'プロパティを持っていることをどうやって知ることができますか?オブジェクトになるように制限されているだけです...

考えられる解決策は、エンティティをインターフェイスでラップすることです。

public interface IRecord
{
    public int recordId { get; }
}

部分クラスを使用して、エンティティにこのインターフェイスを実装させることができます。

次に、メソッドのジェネリック型をそのインターフェースに制約します。

protected void saveform<T>(System.Data.Linq.Table<T> table, bool submit) where T : IRecord
于 2013-02-21T16:53:38.950 に答える