我有一个linq查询,用于填充GridView
上的Page_Load
。我为字母表制作了一个for
字符循环。在填充.Command
的{{1}}的{{1}}中,我使用查询中的相同参数运行一个非常相似的查询,并获得以下错误。
'ConcernContracts.dll'和'System.Web.WebPages.Deployment.dll'中存在类型'<> f__AnonymousType2'
LinkButton
LoadGrid()是相同的,但它不使用LinkButton
条件。
你有什么想法如何解决错误?
错误不会引发异常,但它不会为任何一个查询填充网格。在以下行中发现了错误:void lnkCharacter_Command(object sender, CommandEventArgs e)
{
try
{
var lbtn = (LinkButton)lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument);
var id = lbtn.Text;
using (var db = new dbDataContext())
{
var query = from n in db.tbl_Providers
where ((n.provider_Name.StartsWith(id)) && (n.provider_Deleted == false))
select new
{
n.ProviderId,
n.provider_Name
};
grd_Provider.DataSource = null;
grd_Provider.DataSource = query;
grd_Provider.DataBind();
}
}
catch (SystemException ex) { }
}
答案 0 :(得分:2)
更改网格数据源
grd_Provider.DataSource = query.ToList();
grd_Provider.DataBind();
或创建具有两个属性Provider Id和Name的List,并从输出中绑定该列表 像这样。
List<Entities> abc=query.ToList();
grd_Provider.DataSource =abc;
grd_Provider.DataBind();
答案 1 :(得分:1)
这是一个建议:
您的两个类似查询可能与您在LINQ查询中选择的匿名类型重叠。在一个且仅一个查询中,将select new更改为如下所示:
select new
{
Id = n.ProviderId,
Name = n.provider_Name
};
如果这样做,匿名类型不应再发生冲突,因为您未修改的类型将使用默认名称。
祝你好运,我希望这会有所帮助!答案 2 :(得分:0)
将其转换为List
或IEnumberable
,您无法将数据源的匿名对象传递给gridview。 query.ToList();
您可以将返回类型转换为
IEnumerable<object>
它可以保存任何匿名类型并轻松绑定为数据源
答案 3 :(得分:0)
我有同样的问题,我在匿名类型中添加了另一个属性,并解决了它。
答案 4 :(得分:-1)
Linq不支持某些功能,如.toDays(),。addDays(),. StartsWith()。所以你需要做的是,首先得到结果而不使用.StartsWith()然后尝试应用一些功能来过滤结果StartsWith perticular id。