他們在Nuget System.Linq.Dynamic庫是很長的路要走
[TestMethod]
public void StringyAndDangerous()
{
var fakePersonDbSet = new List<Person> { new Person() { FirstName = "Some", LastName = "Guy" } }.AsQueryable();
var attributes = new string[] { "FirstName", "LastName" };
var selectedFields = String.Join(",", attributes);
var exprssion = string.Format("new ({0})", selectedFields);
var result = fakePersonDbSet.Select(exprssion, attributes).Cast<dynamic>().First();
}
但你鬆散型的安全和編譯ŧ ime檢查。您可能會更好採取另一種方法
[TestMethod]
public void SlowerButSafer()
{
var fakePersonDbSet = new List<Person> { new Person() { FirstName = "Some", LastName = "Guy" } }.AsQueryable();
var attributes = new string[] { "FirstName", "LastName" };
var personPropertylist = CovertToKeyValuePair(fakePersonDbSet.First())
.Where(c=> attributes.Contains(c.Key))
.ToArray();
}
private IEnumerable<KeyValuePair<string, object>> CovertToKeyValuePair<T>(T @object)
{
var result = new List<KeyValuePair<string, object>>();
var properties = typeof (T).GetProperties();
foreach (var property in properties)
{
result.Add(new KeyValuePair<string, object>(property.Name, property.GetValue(@object, null)));
}
return result;
}
,你會採取的性能損失都爲拉動從數據庫字段,你不需要和使用反射但代碼將是不容易出錯,你贏了」最終會出現嘗試選擇不存在的列的錯誤。
對不起,我真的不明白你想什麼來完成 – Pleun 2014-09-06 13:34:53
什麼是你用你的LINQ查詢轉換爲數據庫調用 - 例如實體框架還是老派的linq-to-sql? – Rhumborl 2014-09-06 13:36:53
@Pleun我想我解釋清楚 想象一下數據庫中的一個表10列。 用戶想要打印該表中的所有行但不是所有的cols,只是想打印一些他們 我給用戶複選框的選擇,他想打印 的cols,但我不知道如何編寫選擇代碼用戶選擇的列(他選擇的複選框) – user3915488 2014-09-06 14:30:31