1

私はジェネリックスを使用して、linq2sqlを使用してデータベースからいくつかの基本的な挿入/更新/選択を行っています。

私は次のものを持っていて、列名とオブジェクト値を取り込んで選択するように変換しようとしていますが、それを機能させることができません。

public static T SelectByID<T>(string id) where T : class
{
    try
    {
        using (DataContext db = new DataContext(CHCGlobal.ConnectionString))
        {
            //get Table of type T
            var table = db.GetTable<T>();

            //get object mappings
            MetaModel modelMap = table.Context.Mapping;

            //get the data members for this type
            ReadOnlyCollection<MetaDataMember> dataMembers = modelMap.GetMetaType(typeof(T)).DataMembers;

            //find primary key
            string pk = (dataMembers.Single<MetaDataMember>(m => m.IsPrimaryKey)).Name;

            //return a single object with the id matching the pk field
            return table.SingleOrDefault<T>(delegate (T t)
            {
                string memberId = t.GetType().GetProperty(pk).GetValue(t, null).ToString();
                return memberId.ToString() == id.ToString();
            });
        }
    }
    catch (Exception)
    {
        throw;
    }
}

これは、作成しようとしている関数ですが、selectステートメントでスタックしています。

public static List<T> SelectByKeyValue<T>(string id, object value) where T : class
{
    try
    {
        using (DataContext db = new DataContext(CHCGlobal.ConnectionString))
        {
            //get Table of type T
            var table = db.GetTable<T>();

            //get object mappings
            MetaModel modelMap = table.Context.Mapping;

            //get the data members for this type
            ReadOnlyCollection<MetaDataMember> dataMembers = modelMap.GetMetaType(typeof(T)).DataMembers;

            //find key
            string pk = (dataMembers.Single<MetaDataMember>(m => m.Name.Equals(id))).Name;

            //NOT WORKING
            return table.Select<T, T>(delegate (T t)
            {
                var memberID = t.GetType().GetProperty(pk).GetValue(t, null);
                return memberID.Equals(value);
            }).ToList<T>();
        }
    }
    catch (Exception)
    {
        throw;
    }
}
4

1 に答える 1

1

Whereではなく、を使用する必要がありSelectます。

SelectN個のアイテムをN個の新しいアイテムに変換します。フィルタリングは行いません。
Whereそれをします。

return table.Where(t => t.GetType().GetProperty(pk).GetValue(t, null)
                         .Equals(value))
            .ToList();
于 2013-02-06T13:46:23.670 に答える