在实体框架中显示以字符串列表作为参数的记录

时间:2018-09-25 23:40:02

标签: c# entity-framework linq

我创建了一个通用存储库,该存储库将从实体中获取数据,而与实体无关。

在一种方法中,我想在传递List<string>值的地方检索数据,以检查其是否存在于一列中。如果我传递单个值,我的代码可以正常工作。

关于如何通过List<string>代替INSTITUTIONID的任何想法吗?

通话:

List<REQUESTDASHBOARD> listDashboard = new List<REQUESTDASHBOARD>();
listDashboard = dashboardSericeManager.GetList(
                d => d.INSTITUTIONID != null &&
                d.INSTITUTIONID.Contains("4cb6d23635"), null).ToList();

实施:

public IEnumerable<T> GetList(Expression<Func<T, bool>> predicate, params string[] navigationProperties)
{
    IEnumerable<T> list;

    var query = DbSet.AsQueryable();

    if (navigationProperties != null && navigationProperties.Length > 0)
    {
        foreach (string navigationProperty in navigationProperties)
        {
            query = query.Include(navigationProperty);
        }
    }

    list = query.Where(predicate).ToList<T>();

    return list;
}

1 个答案:

答案 0 :(得分:0)

假设您正在定义一个List<string>集合,如下所示:

var institutionList = new List<string>();

// add data into list
institutionList.Add("institutionID_1");
institutionList.Add("institutionID_2"); // etc

INSTITUTIONID是数据模型类中的字符串属性,那么您可以一起使用Any()Contains()扩展方法来找出INSTITUTIONID,它在上面的列表中可用,类似于SQL中的WHERE ... IN ...查询:

List<REQUESTDASHBOARD> listDashboard = new List<REQUESTDASHBOARD>();

listDashboard = dashboardSericeManager.GetList(d => d.INSTITUTIONID != null 
                && institutionList.Any(x => d.INSTITUTIONID.Contains(x)), null).ToList();