日期:2014-05-20  浏览次数:20827 次

来这里请教一个一对多的查询问题
我现在有两个表,一个Department,一个Users,users通过自身的dguid关联Department表的主键形成关系。
现在有一个这样的查询需求,给出user表的username字段的一个关键字,查询包含这个关键字的所有人和该人员的所属部门,例如我想要查询所有姓李的人员和这些人员分布在那些部门结果要求是:
行政部
  李芳
  李非同
财政部
  李丽
  李国强
研发部
  李崇

我现在的笨方法是这样:
  var k = dc.Table
  .Where(x => x.DepartmentUsers.Any(v => v.UserName.Contains("芳")));

  foreach(var t in k)
  {
  Console.WriteLine(t.DepartmentName);
  var tmp = t.DepartmentUsers.Where(x => x.UserName.Contains("芳"));
  foreach (var c in tmp)
  Console.WriteLine("<" + c.UserName + ">");
  Console.WriteLine(Environment.NewLine);
  }

  Console.Read();

请问如何把他修改的效率更高一点呢?

------解决方案--------------------
精简一下:

var queryResult = departmentList.Join(userList.Where(U => U.lastName.Equals("Li")), department => department.id, UR => UR.id, (department, UR) => new { departmentName = department.name, userName = (UR.lastName + UR.firstName)}).GroupBy(R => R.departmentName).ToList();

探讨

不好意思,写错了。更正一下:

public class User
{
public string id { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public int age { get; set; }
public str……