他们在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