从LINQ查询中选择列

时间:2009-10-20 21:54:52

标签: c# linq-to-sql datagridview

我希望能够选择DataGridView中显示的列。即,我有一个返回IEnumerable的linq查询,但我不想显示Policy的所有属性 - 我想让用户选择要显示的内容。所以我认为像这样的东西可能会创建一个只有我想要的列的“更窄”的对象。

IEnumerable<Policy> policies = repository.GetPolicies();
var results = from p in policies select new {
    if (userPicked("PropertyOne")) PropertyOne = p.PropertyOne,
    if (userPicked("PropertyTwo")) PropertyTwo = p.PropertyTwo,
    ...
};
dataGridView1.DataSource = results;

有优雅的方法吗?

第2部分: 为什么这样做:

IEnumerable<Policy> policies = repository.GetPolicies();
dataGridView1.DataSource = policies;

但这不是:

IEnumerable<Policy> policies = repository.GetPolicies();
var results = from p in policies select p;
dataGridView1.DataSource = results;

在第二种情况下,网格中不显示任何内容。

1 个答案:

答案 0 :(得分:3)

如果您需要动态选择字段,请使用Dynamic Linq。它包含一个Select扩展方法,它接受一串字段,因此您可以决定在运行时选择哪些字段:

public static IQueryable Select(this IQueryable source,    
       string selector, params object[] values);

使用示例:

var products = db.Products
    .Where(condition)
    .OrderBy("Name")
    .Select(" new (ItemId,Name,Model,onsale)");

第2部分:您的网格需要一个可绑定的接口,例如IList,但第二个代码示例返回IQueryable。您可以致电IList将其转换为ToList()

var results = (from p in policies select p).ToList();