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

关于linq访问视图对象结果重复问题
关系:

表LOGER 
左关联 表LogerRole
左关联 表Role
左关联 表RoleMenu
左关联 表Menu

现希望通过Loger表的Loger查得对应所有Menu的MenuName数据.

在数据库的vLogerMenu视图中查询显示正常
数据库只有一个Loger,其ID为0时,以下只讨论单Loger的情况
MenuName
1
2
3
4
5

DBEntities myDBEntities = new DBEntities();
var result = from q in myDBEntities.vLogerMenu
select q;
comboBox_Menu.DataSource = result.ToList<vLogerMenu>();
comboBox1.DisplayMember = "MenuName";
comboBox1.ValueMember = "MenuID";

但是在程序中 用一个combobox保存其值时.结果为
MenuName
1
1
1
1
1

另:
如不使用视图,对单表查询
DBEntities myDBEntities = new DBEntities();
var result = from q in myDBEntities.menu
select q;
comboBox_Menu.DataSource = result.ToList<Menu>();
comboBox1.DisplayMember = "MenuName";
comboBox1.ValueMember = "MenuID";

则combobox元素为:
MenuName
1
2
3
4
5

为什么会这样呢..?
似乎在取 视图的时候 出现覆盖.

 然后我又进行了修改

DBEntities myDBEntities = new DBEntities();
  var result = from q in myDBEntities.vLogerMenu
  //select new { q.LogerID, q.MenuID, q.MenuName };
  select q;
  //comboBox1.DataSource = result.ToList<vLogerMenu>();

  List<vLogerMenu> vLogerMenu_List = new List<vLogerMenu>();
  foreach (var a in result)
  {
  vLogerMenu vLogerMenu_Temp = new vLogerMenu();
  vLogerMenu_Temp.MenuID = a.MenuID;
  vLogerMenu_Temp.MenuName = a.MenuName;
  vLogerMenu_List.Add(vLogerMenu_Temp);
  }
  comboBox1.DataSource = vLogerMenu_List;
  comboBox1.DisplayMember = "MenuID";
  comboBox1.ValueMember = "MenuID";

其结果为:
MenuName
1
2
3
4
5

为什么 直接 绑定视图的时候会 出现 重复现象呢?

------解决方案--------------------
没听说过表和表之间有左右关联的。。。。
------解决方案--------------------
如果设置断点Debug不能找出问题,
那就用SQL Server Profiler跟踪一下生成的ESql吧,看看Sql有什么不同