如何在C#

时间:2018-11-30 16:09:28

标签: c# mongodb asp.net-core-2.1

我正在为.NET Core 2.1中的mongodb创建数据库摘要。 为此,我使用了Nu-Get的mongo驱动程序。

现在,我正在研究一种简单的通用扩展方法,以类似于关系数据库的其他数据库抽象那样的方式包含引用的对象。

以下示例显示了我如何计划获取客户集合并包括相关的工作机会:

//get the customer collection and include the related job offers
var result = Database.Customers.Find(x => x.Id != null).Include(x => x.JobOffers);

这是Include扩展方法的代码:

public static IList<T> Include<T>(this IFindFluent<T, T> result, Expression<Func<T, object>> filter)
    {
        var propertyName = filter.Body.ToString().Split(".")[1];
        var idFieldName = typeof(T).Name.Substring(0, typeof(T).Name.Length) + "Id";

        var list = new List<T>();
        foreach (dynamic item in result.ToList())
        {
            try
            {
                var type = item.GetType().GetProperty(propertyName).PropertyType.GenericTypeArguments[0];
                var builder = Builders<JobOffer>.Filter;
                var queryFilter = builder.Eq(idFieldName, (string)item.Id);
                var prop = item.GetType().GetProperty(propertyName);

                var relatedItems = _database.GetCollection<JobOffer>(propertyName).Find(queryFilter).ToList();
                prop.SetValue(item, relatedItems);

            }
            catch (Exception e)
            {

            }
            list.Add(item);

        }
        return list;
    }

到目前为止,它仍然有效,但是现在它仅适用于JobOffers类型的对象,并且应该适用于任何类型的对象。

所以我的问题是:在try {}部分中,有一个变量类型,其中所需的类存储为Type。

如何在尖括号中使用此类型?我想做这样的事情:

var type = item.GetType().GetProperty(propertyName).PropertyType.GenericTypeArguments[0];
var builder = Builders<type>.Filter;
var relatedItems = _database.GetCollection<type>(propertyName).Find(queryFilter).ToList();

但是我得到了一个错误:type是一个变量,但是被用作类型。

我该如何解决?

0 个答案:

没有答案