[英]about return type in linq
我有一个包含多个字段的表,我只需要一个字段。 该表称为ZipCompare。 我通常使用IQueryable <>作为linq查询的返回类型。 但是对于以下代码,出现错误,提示“无法将类型System.Linq.IQueryable<AnonymousType#1>
隐式转换为ZipCompare。那么我应该使用哪种返回类型?我使用此函数来填充dropdownlist控件。我的代码是:
public IQueryable<ZipCompare> GetStates()
{
VettingDataContext dc = new VettingDataContext(_connString);
dc.DeferredLoadingEnabled = true;
var query = (from c in dc.ZipCompares
select new { States = c.State }).Distinct();
return query;
}
前端代码:
ddl_BilState.DataSource = zipDAL.GetStates();
ddl_BilState.DataTextField = "States";
ddl_BilState.DataValueField = "States";
ddl_BilState.DataBind();
这是一个.net Web应用程序,我用c#编写。
查看您的查询:
var query = (from c in dc.ZipCompares
select new { States = c.State }).Distinct();
那不是在选择ZipCompare
,而是在选择匿名类型。 目前还不清楚是什么你正在尝试做的,但如果你想返回一个IQueryable<ZipCompare>
您的select
条款将需要选择一个ZipCompare
。
如果你不想返回ZipCompare ......好吧,在这种情况下,它看起来像你并不需要一个匿名类型。 只需使用:
var query = (from c in dc.ZipCompares
select c.State).Distinct();
或更简洁地说:
return dc.ZipCompares.Select(c => c.State).Distinct();
然后,您更改数据绑定以绑定到值本身(也许使用“。”作为字段?或者也许使用空字符串?不确定)。
返回IEnumerable<TypeOfStateProperty>
,并更改查询以不使用匿名类型。 例如,如果State
是StateEnum
值:
public IEnumerable<StateEnum> GetStates()
{
VettingDataContext dc = new VettingDataContext(_connString);
dc.DeferredLoadingEnabled = true;
var query = (from c in dc.ZipCompares select c.State ).Distinct();
return query;
}
也许您想返回字符串列表? 状态看起来像一个字符串...
将返回类型更改为List<string>
并执行以下操作:
foreach(var item in query)
{
myList.Add(item.States);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.