关于linq中的返回类型
本文关键字:返回类型 linq 关于 | 更新日期: 2023-09-27 18:25:33
我有一个表,它有多个字段,我只需要一个字段。这张桌子叫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);
}