我已经使用 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
(或无参数)确实有效 - 它显示所有对象。
有没有办法让我为第一个对象指定一个“空”值而不使用幻数对象(比如在数据库中有一个虚假条目只是为了指定一个 N/A 值)?类似于可为空的东西是理想的,但我有点迷路了。
另外,我尝试添加new T()
而不是添加null
到列表中,但这只会导致OutOfMemoryException
.