读书人

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

发布时间: 2012-02-03 22:02:47 作者: rapoo

关于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有什么不同

读书人网 >.NET

热点推荐