首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于LINQ中多表关联的有关问题

2011-12-26 
关于LINQ中多表关联的问题.假如有A,B两个表,A字段为name,deptidB为deptid,deptname。是个主从表。一个方法返

关于LINQ中多表关联的问题.
假如有A,B两个表,A字段为 name,deptid B为deptid,deptname。是个主从表。一个方法返回A,B表的关联记录,想问一下这个方法应该返回社么类型??

[解决办法]
如你所愿:

C# code
private   [color=#FF0000]IEnumerable[/color]   GETLIST() {         var   result   =   from   p   in   db.B                           select   new                           {                               //生成含Name,Deptid,Deptname三个属性的匿名类型                                   Name=p.A.name,                               Deptid=p.deptid,                               Deptname=p.deptname                           };           return   XX; }
[解决办法]

C# code
private IEnumerable  GETLIST() {         var   result   =   from   p   in   db.B                           select   new                           {                               //生成含Name,Deptid,Deptname三个属性的匿名类型                                   Name=p.A.name,                               Deptid=p.deptid,                               Deptname=p.deptname                           };           return   result; } //其实我们也可以更无耻地向上转换啊,哪个对象敢说自己不是object?数据绑定控件会自动识别该object是否实现了必须的接口的private IEnumerable  GETLIST() {         var   result   =  db.B.select(p=>Name=p.A.name,Deptid=p.deptid,Deptname=p.deptname);                               return   result; }
[解决办法]
C# code
//其实我们也可以更无耻地向上转换啊,哪个对象敢说自己不是object?数据绑定控件会自动识别该object是否实现了必须的接口的private object  GETLIST() {         var   result   =  db.B.select(p=>Name=p.A.name,Deptid=p.deptid,Deptname=p.deptname);                               return   result; }
[解决办法]
//其实我们也可以更无耻地向上转换啊,哪个对象敢说自己不是object?数据绑定控件会自动识别该object是否实现了必须的接口的
private object GETLIST() 

var result = db.B.select(p=>Name=p.A.name,Deptid=p.deptid,Deptname=p.deptname);
return result; 



这样可以返回回去 ,但是如果需要再对返回的值进行LinQ筛选你返回的这个可以吗?
[解决办法]
先建个视图
public class VAB
{
public string Name;
public int DeptId;
public string DeptName;
}

在查询
public IQueryable<VAB> SearchAB()
{
IQueryable<VAB> recordList = from a in db.A
join b in db.B on a.DeptId equals b.DeptId
select new VAB
{
Name = a.Name;
DeptId = a.DeptId;
DeptName = b.DeptName;
};
return recordList;
}
[解决办法]
linq_chen 
不灭De传说 说的也有一定的道理

但是
private IEnumerable GETLIST()
{
var result = from p in db.B
select new
{
//生成含Name,Deptid,Deptname三个属性的匿名类型
Name=p.A.name,
Deptid=p.deptid,
Deptname=p.deptname
};
return XX;
}
但是你这样的话.result就变成匿名类型,应该不能转化的吧,呵呵..我刚入门


==============================================================



cjc1983 
 
等 级:
 发表于:2007-12-14 12:10:3817楼 得分:0 
先建个视图 
public class VAB 

public string Name; 
public int DeptId; 
public string DeptName; 


在查询 
public IQueryable <VAB> SearchAB() 

IQueryable <VAB> recordList = from a in db.A 
join b in db.B on a.DeptId equals b.DeptId 
select new VAB 

Name = a.Name; 
DeptId = a.DeptId; 
DeptName = b.DeptName; 
}; 
return recordList; 

 
我同意这种方法~~
 
 
 

[解决办法]
A[] aa = (from a in dc.A
join b in dc.B
on a.deptid equals b.deptid
where a.deptid == a.deptid
select a).ToArray();
[解决办法]

探讨
另外可以用
from a in A
join b in B on a.deptid equals b.deptid
select new {Id = a.deptid, Name = a.name, DepName = b.deptname}

[解决办法]
定义一个类就OK了

热点排行