我有一个 linq 查询,用于填充
GridView
上的 Page_Load
。我为字母表制作了一个 for
字符循环。在填充 .Command
的 LinkButton
的 LinkButton
中,我使用查询中的相同参数运行非常相似的查询,并收到以下错误。
类型“<>f__AnonymousType2”同时存在于“ConcernContracts.dll”和“System.Web.WebPages.Deployment.dll”中
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) { }
}
LoadGrid() 是相同的,但它不使用
.StartsWith()
条件。
您有任何解决该错误的想法吗?
该错误不会引发异常,但不会填充任一查询的网格。在以下行中发现了错误:
grd_Provider.DataSource = query;
更改网格数据源
grd_Provider.DataSource = query.ToList();
grd_Provider.DataBind();
或创建具有两个属性 Provider Id 和 Name 的列表,并从输出绑定该列表 像这样。
List<Entities> abc=query.ToList();
grd_Provider.DataSource =abc;
grd_Provider.DataBind();
这里有一个建议:
您的两个相似的查询可能与您在 LINQ 查询中选择的匿名类型重叠。在一个且仅一个查询中,将 select new 更改为如下所示:
select new
{
Id = n.ProviderId,
Name = n.provider_Name
};
如果您这样做,匿名类型不应再发生冲突,因为您不修改的类型将使用默认名称。
祝你好运,我希望这会有所帮助!
我遇到了同样的问题,我向匿名类型添加了另一个属性并解决了这个问题。
将其转换为
List
或 IEnumerable
,您只是无法将匿名对象作为 datasource 传递给 gridview。 query.ToList();
您可以将返回类型转换为
IEnumerable<object>
它可以保存任何匿名类型并可以轻松绑定为数据源
Linq 不支持某些功能,例如 .toDays()、.addDays()、.StartsWith() 。所以你需要做的是,首先不使用 .StartsWith() 获取结果,然后尝试应用一些功能来过滤结果 StartsWith 特定 id。