using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace Utils.Attributes { [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public sealed class DataReferenceAttribute : Attribute { public DataReferenceAttribute(string thisTableJoinProperty, Type otherTableType, string needPropert) { _ThisTableJoinProperty = thisTableJoinProperty; _OtherTableType = otherTableType; _OtherTableJoinProperty = "ID"; _NeedPropert = needPropert; } public DataReferenceAttribute(string thisTableJoinProperty, Type otherTableType, string otherTableJoinProperty, string needPropert) : this(thisTableJoinProperty, otherTableType, needPropert) { _OtherTableJoinProperty = otherTableJoinProperty; } private string _ThisTableJoinProperty; public string ThisTableJoinProperty { get { return _ThisTableJoinProperty; } private set { _ThisTableJoinProperty = value; } } private Type _OtherTableType; private string _OtherTableJoinProperty; private string _NeedPropert; public object GetValue(string thisTablePropertyValue, string connectionStr) { if (thisTablePropertyValue.IsNullOrEmpty() || thisTablePropertyValue == "0") return string.Empty; var tableName = _OtherTableType.Name; string sql = "select {0} from {1} where {2} = '{3}'"; sql = string.Format(sql, _NeedPropert, tableName, _OtherTableJoinProperty, thisTablePropertyValue); SqlDataAdapter da = new SqlDataAdapter(sql, connectionStr); DataSet ds = new DataSet(); da.Fill(ds); var table = ds.Tables[0]; if (table.Rows.Count == 0) return ""; return table.Rows[0][0];//table.Rows[0][_NeedPropert] } } }