三张桌子:
地理数据: ID
地址: ID,GeoDataID,UserID
产品: ID,UserID
GeoData.ID和Address.GeoDataID之间存在一对一关系,Address.UserID和Products.UserID之间存在一对多的关系
我有一个GeoData ID数组作为输入,我想得到所有相关的产品。
如果我只有一个GeoData ID,我会尝试类似:
int geoDataID = 3456;
using (var context = new BaseContext())
{
from p in context.Products
join a in context.Addresses on p.UserID equals a.UserID
join g in context.GeoData on a.GeoDataID equals g.ID
where g.ID == geoDataID
select new { p };
}
但由于我有一个Array(int [] geoData)作为输入,我无法将它放在一起。
答案 0 :(得分:1)
试试这个:
using (var context = new BaseContext())
{
var results = from p in context.Products
join a in context.Addresses on p.UserID equals a.UserID
where geoData.Contains(a.geoDataID)
select p;
}
答案 1 :(得分:1)
您需要做的就是使用地理数据ID集合上的Contains()方法来过滤所需的记录。
public IEnumerable<Product> GetProductsByGeoData(IEnumerable<int> geoDataIds)
{
var products = context.GeoData
.Where(gd => geoDataIds.Contains(gd.Id))
.Join(context.Addresses,
gd => gd.Id,
a => a.GeoDataId,
(gd, a) => a)
.Join(context.Products,
a => a.UserId,
p => p.UserId,
(a, p) => p);
return products;
}