我正在网络聊天应用程序上完成学校作业。我希望使用datalist在聊天框中显示之前的聊天,但数据列表不显示。
这是我在.aspx中的代码:
public void LoadChatbox()
{
Session["Name"] = "weiwei";
int waiwai = 1004;
//Request.QueryString["friendid"] = "waiwai";
Session["userid"] = 1005;
int userid = int.Parse(Session["userid"].ToString());
//int receiverid = int.Parse(Request.QueryString["friendid"]);
int receiverid = waiwai;
string name = Session["Name"].ToString();
DataSet ds = new DataSet();
ds.Locale = System.Globalization.CultureInfo.InvariantCulture;
IEnumerable<DataRow> query =
(from user in db.Users.AsEnumerable()
join ch in db.ChatHistories.AsEnumerable()
on user.Userid equals ch.Senderid
where ch.Senderid == userid && ch.Receiverid == receiverid || ch.Receiverid == userid && ch.Senderid == receiverid orderby ch.id
select new
{
Image = user.image,
Message = ch.message,
Time = ch.dateTime
})
as IEnumerable<DataRow>;
DataTable chatbox = query.CopyToDataTable<DataRow>();
ds.Tables.Add(chatbox);
DataList3.DataSource = ds;
DataList3.DataBind();
}
这是我在.cs中的代码:
// load file into a JObject
JObject document;
using (var fileStream = File.OpenRead(someFilePath))
using (var streamReader = new StreamReader(fileStream))
using (var jsonReader = new JsonTextReader(streamReader))
document = JObject.Load(jsonReader);
// read the JObject
var bugs = (JObject) document["bugs"];
foreach (var bugEntry in bugs)
{
var bugID = bugEntry.Key;
var bugData = (JObject) bugEntry.Value;
var comments = (JArray) bugData["comments"];
foreach (JObject comment in comments)
Debug.Print(comment["text"]);
}
答案 0 :(得分:0)
select new
{
Image = user.image,
Message = ch.message,
Time = ch.dateTime
})
as IEnumerable<DataRow>;
as IEnumerable<DataRow>
导致您的query
变量为null
,因为查询将导致匿名类型的集合,而不是DataRow
个对象的集合。
您需要投放到DataRow
项目或使用其他方式填充DataTable
。
另外,如果没有必要,我不会在查询中的数据集上调用.AsEnumerable()
。它将强制将整个表加载到内存中,并在Linq而不是数据库中完成连接。如果删除AsEnumerable
会导致问题,那么您应该找到解决这些问题的不同方法。
答案 1 :(得分:0)
我将代码更改为:
var chatbox = new DataTable();
chatbox.Columns.Add("Image", typeof(string));
chatbox.Columns.Add("Message", typeof(string));
chatbox.Columns.Add("Time", typeof(DateTime));
(from user in db.Users.AsEnumerable()
join ch in db.ChatHistories.AsEnumerable()
on user.Userid equals ch.Senderid
where ch.Senderid == userid && ch.Receiverid == receiverid || ch.Receiverid == userid && ch.Senderid == receiverid
orderby ch.id
select new
{
Image = user.image,
Message = ch.message,
Time = ch.dateTime
})
.Aggregate(chatbox, (dt, r) => { dt.Rows.Add(r.Image, r.Message, r.Time); return dt; });
它有效,谢谢。