我正在嘗試使用Linq2SQL加載實體的集合。問題是,我不知道實體是什麼,IList<object>
。我嘗試使用反射來選擇它們,但是當我執行選擇時,出現內存不足錯誤,我推測因爲上下文無法解析我的表達式,並正在從數據庫中加載所有內容。Linq2SQL - 使用反射選擇項目
如果有人對此有任何建議,或者按照我的意願選擇其他方式,請告訴我。
foreach (object entity in requiredEntities)
{
Type entityType = entity.GetType();
IQueryable<object> entityTable = (IQueryable<object>)dataContext.GetTable(entityType);
// grab the objects primary key field
var pkeyField = entityType.GetProperties().SingleOrDefault(p =>
p.GetCustomAttributes(typeof(System.Data.Linq.Mapping.ColumnAttribute),true)
.Cast<System.Data.Linq.Mapping.ColumnAttribute>()
.Any(attrib => attrib.IsPrimaryKey));
object pkeyValue = pkeyField.GetValue(entity,null);
Func<object,bool> primaryKeySelector = o => pkeyField.GetValue(o,null) == pkeyValue;
// crash here, out of memory exception
object result = entityTable.Where(primaryKeySelector).SingleOrDefault();
}
哦,我想避免動態LINQ如果可能的話 – jasper
是集requiredEntities'的'單一類型? –
不,多種類型 – jasper