我使用Linq将自己一头扎进C#和.Net 2.0,我在调试一些问题时遇到了一些问题,如下所示:
我有一个ComboBox控件(cmbObjects
)我想用一组使用Linq检索的对象填充。我编写了一个帮助方法来填充List<T>
泛型:
class ObjectProvider
{
public static List<T> Get<T>(bool includeNull) where T : class, new()
{
List<T> list = new List<T>();
LutkeDataClassesDataContext db = ConnectionManager.GetConnection();
IQueryable<T> objects = db.GetTable<T>().AsQueryable();
if (includeNull) list.Add(null);
foreach (T o in objects) list.Add(o);
return list;
}
public static List<T> Get<T>() where T : class, new()
{
return Get<T>(false);
}
}
我在使用true或false调用函数时验证了结果 - List
确实包含正确的值,在传递true
时,它包含null
作为第一个值,后跟其他对象。
但是,当我将DataSource
分配给ComboBox
时,控件只是拒绝显示任何项目,包括null
值(不可选):
cmbObjects.DataSource = ObjectProvider.Get<Car>(true);
传入false
(或没有参数)确实有效 - 它会显示所有对象。
有没有办法让我为第一个对象指定一个“null”值,而不需要使用幻数对象(比如在数据库中有一个虚假的条目来指定一个N / A值)?可空的东西是理想的,但我有点迷失。
此外,我已尝试在列表中添加new T()
而不是null
,但这只会产生OutOfMemoryException
。
答案 0 :(得分:1)
组合框控件具有将数据绑定项附加到列表中的硬编码项的选项。所以你硬编码你的n / a值,数据绑定真实值。
答案 1 :(得分:0)
好的,如果您尝试添加DataSource
值,null
似乎无效。解决方案是在开始时通过一个简单的foreach
循环添加项目,而不是分配List<>
。