在 asp net linq 中读取特定用户的组名



我有这个VisitorsDataSet,它有一个列VisitorGroupID,可以NULL,也可以有一个值引用另一个称为 VisitorGroups 的表。我想读取页面中特定访问者的组名称(属于访问者组的列),我的查询应该是什么样子?

这就是我现在所做的,但这返回了所有存在的组,这是错误的。

C#:

private DataSet _groups;
var results = _groups.Tables[0].AsEnumerable()
.GroupBy(x => x["GroupName"]).Select(g => g.First())
.Where(x => !string.IsNullOrEmpty(x["GroupName"].ToString()))
.CopyToDataTable();

选择id==1的用户组的示例:

_groups = new DataSet();
_groups.Tables.Add(new DataTable("users"));
_groups.Tables.Add(new DataTable("groups"));    
_groups.Tables[0].Columns.Add("id_user", typeof(int));
_groups.Tables[0].Columns.Add("user_name");
_groups.Tables[0].Columns.Add("id_group", typeof(int));
_groups.Tables[1].Columns.Add("id_group", typeof(int));
_groups.Tables[1].Columns.Add("group_name");
_groups.Tables[0].Rows.Add(1, "Nom1", 1);
_groups.Tables[0].Rows.Add(2, "Nom2", 2);
_groups.Tables[0].Rows.Add(3, "Nom3", null);
_groups.Tables[1].Rows.Add(1, "Group1");
_groups.Tables[1].Rows.Add(2, "Group2");
Console.WriteLine(_groups.GetXml());
var result = _groups.Tables[0].AsEnumerable()
.Where(user => user.Field<int>("id_user") == 1)
.Join(_groups.Tables[1].AsEnumerable(), user => user.Field<int?>("id_group"), group => group.Field<int>("id_group"), (user, group) => new { id_user = user.Field<int>("id_user"), group_name = group.Field<string>("group_name") }).First();
Console.WriteLine(result.group_name);
var result2 = _groups.Tables[0].AsEnumerable()
.Where(user => user.Field<int>("id_user") == 3)
.Join(_groups.Tables[1].AsEnumerable(), user => user.Field<int?>("id_group"), group => group.Field<int>("id_group"), (user, group) => new { id_user = user.Field<int>("id_user"), group_name = group.Field<string>("group_name") }).FirstOrDefault();
Console.WriteLine(result2 != null? result2.group_name:null);
Console.ReadLine();

最新更新