如何定义resultList以允许存储数据库行?
List<WhatType?> resultList = new List<WhatType?>();
if(someBool){
resultList = db.table.where(a=>a.value>0).ToList();
}
else{
resultList = db.table.where(a=>a.values<=0).ToList();
}
我似乎无法执行以下操作,因为var需要一个初始值:
var result;
if(someBool){
result = db.table.where(a=>a.value>0).ToList();
}
else{
result = db.table.where(a=>a.values<=0).ToList();
}
这里有更好的解决范围问题的方法吗?
谢谢!
答案 0 :(得分:0)
将其设置为空列表:
var result = new List<WhatType?>();
如果使用.NET 4.0,您可以使用动态类型,但是您需要将其强制转换:
var result = new List<dynamic>();
result = (List<dynamic>)db.Blogs.Where(b => b.ID == 1);
答案 1 :(得分:0)
那么,您使用的是什么ORM技术?你如何获得db
对象?收集的table
元素的类型是什么?
如果您根本不知道,可以将此特定语句组合成条件(三元)表达式:
var result = someBool
? result = db.table.Where(a=>a.value>0).ToList()
: db.table.Where(a=>a.values<=0).ToList();
不适用于所有情况;例如,如果您需要返回result
或将其作为参数传递给另一个方法,您必须知道您期望收集的类型。但是,对于这个小块,您可以让编译器推断出类型。
编辑:如果没有关于变量db
及其属性table
的更多信息,我无法给出更好的答案。我的第一个问题是,你在对象和数据库之间使用了什么?是Linq2SQL吗? Linq for Entities? NHibernate的?
在所有情况下,Linq提供程序都会为您提供一个IQueryable引用,它是表达式树的基础,它将被评估并消化为本机查询语言(最常见的是SQL)。在99%的情况下,IQueryable强类型为正在生成的对象类型。如果您将上述代码插入您的程序,并将鼠标悬停在var
关键字上,您将获得一个工具提示气球,其中包含推断类型的名称和说明。正如我所说,那可能是IQueryable<T>
,在这个工具提示中会有一个脚注,说明在这种情况下T是什么。
如果IQueryable不是通用的,那么收集的类型将只是Object。但是,如果是这种情况,则Where方法将无法编译,因为Object没有Value或Values属性。
答案 2 :(得分:0)
在Linq2SQL中,结果大部分时间都是IQueryable。将鼠标悬停在Where子句上时,IntelliSense将显示其类型
答案 3 :(得分:0)
就个人而言,我不喜欢使用var,除非我必须这样做。所以将其定义为:
List<table> resultList = new List<table>();
if(someBool){
resultList = db.table.where(a=>a.value>0).ToList();
}
else{
resultList = db.table.where(a=>a.values<=0).ToList();
}
其他答案忽略了这一点,因为您想知道如何定义类型。简单来说,将其定义为您的返回类型。如果需要Integer列表,则类型为List。关于这一点的要点是你用表名替换表,所以如果是客户你会这样做:
List<customers> resultList = new List<table>();
if(someBool){
resultList = db.customers.where(a=>a.value>0).ToList();
}
else{
resultList = db.customers.where(a=>a.values<=0).ToList();
}
要扩展@ KeithS的答案,您现在可以执行以下操作:
List<customer> result = someBool ? result = db.customer.where(a=>a.value>0).ToList()
: db.customer.where(a=>a.values<=0).ToList();
希望一切都有意义:))
答案 4 :(得分:0)
您必须使用db.table
答案 5 :(得分:0)
看起来你正在使用Linq2Sql。如果是这种情况,那么您肯定知道查询的结果类型,因为您在任何一种情况下都在同一个表上执行查询。这些不是返回的匿名类型,您的ORM已将每个表映射到相应的类。
顺便说一下,你的例子会让人相信你在任何一种情况下都在查询同一张桌子。如果不是这样,那么您应该将示例更新为正确。答案 6 :(得分:0)
resultList = db.table.where(a=>a.value>0 && someBool || a.value<=0 && !someBool).ToList();