Первый:
var relationshipDetails = (from p in dc.tbl_ClientRelationships
where p.ID == relationship_id
select p).FirstOrDefault();
Linq-запросы - это объекты, которые представляют запрос, отделяют их и отличаются от результатов этих запросов.В этом случае я бы предложил что-то вроде этого:
var relationshipDetails = dc.tbl_ClientRelationships
.FirstOrDefault( p => p.Id == relationship_id);
Теперь это будет очень медленно:
foreach (string c in _cols)
{
if (relationshipDetails.GetType().GetProperty(c).GetValue(relationshipDetails, null).ToString() != null)
{
setValue(relationshipDetails.GetType().GetProperty(c).GetValue(relationshipDetails, null).ToString(), c);
}
}
Вы можете легко получить ссылку на элементы отраженияи сократить накладные расходы, может быть, что-то вроде этого: (Не может быть 100% правильный синтаксис)
var properties = relationshipDetails.GetType().GetProperties();
foreach (string c in _cols)
{
var currentProperty = properties.Single( p=> p.Name == c );
if (currentProperty.GetValue(relationshipDetails, null) != null)
{
setValue(currentProperty.GetValue(relationshipDetails, null).ToString(), c);
}
}
Наконец - зачем вы это делаете?Пожалуйста, подробно опишите, что вы пытаетесь сделать, и почему обращение к столбцам в безопасном именованном виде, например:
relationshipDetails.Id = ...
relationshipDetails.SomethingElse = ...
relationshipDetails.AnotherThing = ...
Не будет работать в вашем случае.