首先,一般我们要解决表中数据多对多的问题,一般是这样的做法:
使用外键相关联,然后如果想通过左表访问到所有与之关联的右表数据,只需要查出中间表与左表对应的Id的数据即可。
如果是直接写SQL就是一个in查询运算符即可,但是LINQ中是没有现成的方法的,我们需要手动来实现一个。
///获取所有的Id集合
List<int> proIdList = Context.BLLSession.MerPdtRelation.Where(c => c.mId == Context.MatNow.Id).Select(c => c.pId).ToList();
///然后获取Id集合中的有的元素的集合
List<wProdcuts> datCnt = Context.BLLSession.wProdcuts.Where(c => proIdList.Contains(c.Id)).ToList();
上面代码的关键也就是 第一个查询语句的Select操作和第二个Contains操作。
如果我们把它写成相应的linq语句,则是:
IEnumerable<int> proLst = from item in Context.BLLSession.MerPdtRelation where item.mId == Context.MatNow.Id select item.pId;
IEnumerable<wProdcuts> outResult= from item in Context.BLLSession.wProdcuts where proLst.Contains(item.Id) select item;
一般SQO标准查询运算符是LINQ语句是可以相互转换的,大家在使用的时候就因人而异了。