Linq查询字符串

时间:2018-07-15 00:17:40

标签: c# asp.net linq id

我想从项目中的一页重定向到另一页。我想在与该页面上单击的新闻相关的其他页面上显示新闻页面的内容。我正在尝试使用QueryString,但是我想在用linq编写的查询部分中进行类型转换,这会导致错误。

Code Section Shape;

BlogContext blg = new BlogContext();
string id = Request.QueryString["haberid"]; 
var baslikcek = from news in blg.Habers 
                where (news.ID == id) 
                select new { news.Baslik }; //Error Line 
baslik.DataSource = id.ToList();
baslik.DataBind();

2 个答案:

答案 0 :(得分:1)

我假设您的news.ID列是整数类型,但是您的string idString

您需要将字符串解析为int才能执行比较:

String idStr = this.Request.QueryString["haberid"];
if( Int32.TryParse( idStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out Int32 idValue )
{
    baslik.DataSource = blg.Habers
        .Where( news => news.ID == idValue )
        .ToList();
    baslik.DataBind();    
}
else
{
    // show HTTP 404 error, or HTTP 400 Bad request
}

您最初的Linq查询使用C#内置语法而不是Extension-method语法(我更喜欢它的表达性和清晰度)。您不需要select new { news.Baslik }部分,因为无论如何,它是由Where部分返回的。

另外,您为baslik.DataSource分配了错误的对象,因为id.ToList()返回的字符串id?haberid=)的字符是没有意义的,而不是{{ 1}}。

答案 1 :(得分:0)

您必须修改此代码

select new { news.Baslik }; //Error Line

进入此

select new { list = news.Baslik };

并修改此代码

baslik.DataSource = id.ToList();

进入此

baslik.DataSource = baslikcek.list;

说明:选择新的{.....}表示您以动态类型返回对象。每个动态对象都需要一个类似类的属性。 错误是您添加了不带属性名称的值。例如,我将其“列表”命名为select new { list = news.Baslik };之类的名称属性。然后,您可以从其属性中设置数据源,例如baslik.DataSource = baslikcek.list;

仅供参考,您可以根据需要添加动态对象的属性名称。