注意 linq to entity 连表查询
1.连表的时候 获取两个表中的字段,在其中一个表对应的实体类中添加另外一个表中需要的字段即可。类与数据库中的字段并不一定一一对应。
2. var a=... select new 类名 {} ,两个表在同一个edmx文件中,按照一二的话,返回该类,或者返回 var b= ....select {} ,进行迭代输出。但b是什么类型呢?IEnmurable类型的泛型集合?
3. 如果联合查询的两个表不在同一个上下文呢,即两个表在不同的edmx文件中,怎么关联呢?
一种做法:在业务逻辑层对根据条件返回的泛型集合或指定类型对象进行筛选。第二种:是否可以新建一个实体,对应两个表,用codefirst中Fluent API,或两个表建立视图?然后。。。
4.下面是linq to sql 的第一种做法
public static IQueryable<Project> GetAll()
{
var result =from a in myDcFmDataContext.FmBankDetail
join b in myDcFmDataContext.FmBusiness
on a.BankDetailID equals b.BankDetailID
join c in myDcFmDataContext.FmBusinessDetail
on b.BusinessID equals c.BusinessID
where c.FromTable.Trim() =="FLOW_EDM_OPR"
select new Project
{
BankDetailChequeNo = a.BankDetailChequeNo,
BankDetailDate = a.BankDetailDate,
BankDetailVoucher = a.BankDetailVoucher,
BankDetailRemark = a.BankDetailRemark,
BusinessDetailSum = c.BusinessDetailSum,
FromID = c.FromID
};
foreach (var r in result)
{
var p = (from a in myDcProjectDataContext.FLOW_EDM_OPR
where r.FromID == a.ID
select a).FirstOrDefault();
r.QTY = p.QTY.Value;
r.PRICE = p.PRICE.Value;
}
public class Project
{
public Project()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public string BankDetailChequeNo { get; set; }
public DateTime BankDetailDate { get; set; }
public string BankDetailVoucher { get; set; }
public string BankDetailRemark { get; set; }
public decimal BusinessDetailSum { get; set; }
public int FromID { get; set; }
public int QTY { get; set; }
public double PRICE { get; set; }
}
return result;