public DataTable Get_table_data()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("user_name");
dt.Columns.Add("user_email");
dt.Columns.Add("status");
dt.Columns.Add("Role");
DataRow data_table_new_row = null;
var rows = (from s in db.logins
where s.status == 1
select s);
foreach (var r in rows)
{
data_table_new_row= dt.NewRow();
dt.Rows.Add(r.Id,r.user_name,r.user_email,r.status,r.Role);
}
int c = dt.Rows.Count;
return dt;
}
我试图制作WCF应用程序。我想从表中获取所有表数据并将数据返回到客户端application.i已将linq数据转换为tabledata。但它给了我错误,wcf不支持这种类型的返回类型。
答案 0 :(得分:1)
您可以将DataSet返回给客户端,在这种情况下,您只需要更新方法返回类型,将DataTable添加到DataSet,然后将其返回给客户端。
但是,DataSet不是WCF中数据传输的最佳选择。相反,尝试创建自己的自定义数据传输对象(DTO),从LINQ查询中对其进行水合,然后将DTO返回给调用者。
您可以在此处找到有关WCF DataContracts的更多信息:
http://msdn.microsoft.com/en-us/library/ms733127%28v=vs.110%29.aspx
这是一个假设的用户DTO:
[DataContract]
public class User
{
[DataMember]
public int Id {get;set;}
[DataMember]
public string UserName {get;set;}
[DataMember]
public string Password {get;set;}
}
我还建议将Request/Response pattern与WCF一起使用,在这种情况下,您还需要一个带有用户DTO列表的Response DTO:
[DataContract]
public class Response
{
[DataMember]
public bool Success {get;set;}
[DataMember]
public string Message {get;set;}
[DataMember]
public List<User> Users {get;set;}
}
答案 1 :(得分:1)
通常不建议在WCF中返回DataTable
。通过电线发送它是非常大和笨重的。它也不是最好的设计。
而是创建自己的类并将这些对象的List发送到客户端。
使用DataContractAttribute
和DataMemberAttribute
定义您的课程:
[DataContract]
public class User
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public string UserEmail { get; set; }
[DataMember]
public int Status { get; set; }
[DataMember]
public string Role { get; set; }
}
然后在foreach
循环中填充List<User>
集合,然后返回。
var listOfUser = new List<User>();
foreach (var r in rows)
{
var user = new User();
user.Id = r.Id;
user.UserName = r.user_name;
user.UserEmail = r.user_email;
user.Status = r.status;
user.Role = r.Role;
listOfUser.Add(user);
}
return listOfUser;