3桌linq加上foreach

时间:2017-03-02 21:56:44

标签: asp.net-mvc linq foreach

三张桌子:

地理数据: 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)作为输入,我无法将它放在一起。

2 个答案:

答案 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;

}