linq 在C#中过滤IQueryable中的一些列

anauzrmj  于 2023-04-27  发布在  C#
关注(0)|答案(1)|浏览(168)

我需要使用反射从包含另一个对象的IQueryable中删除一些列(所以我不想使用匿名类型来创建没有列的新IQueryable)。
我试过了,但这不是正确的解决方案:

string[] columnsToRemove = { "Insurance" };
    var myQuery = _dataService.GetQuery<Insurance>().Include(i => i.Partner);

    var attributes = myQuery.GetType().GetProperties();

    foreach (var attribute in attributes)
    {
        foreach (var column in columnsToRemove)
        {
            if (attribute.Name != column)
            {
                // Remove the column from query
                var newQuery = myQuery.Where(t => t.GetType().GetProperty(column).Name != column);
                return newQuery;
            }
        }
    }
fhg3lkii

fhg3lkii1#

您可以尝试使用Select,但您需要列出除排除的属性之外的所有属性:

var myQuery = _dataService.GetQuery<Insurance>()
   .Select(i => new Insurance
   {
      Partner = i.Partner,
      // ... rest of the properties except for Insurance
   });

注意,在EF和Select的情况下,Include将不起作用,因此您需要在查询中显式设置相应的属性。
其他选项

相关问题