相关疑难解决方法(0)

在c#中组合两个lambda表达式

给定这样的类结构:

public class GrandParent
{
    public Parent Parent { get; set;}
}
public class Parent
{
    public Child Child { get; set;}
}

public class Child
{
    public string Name { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

和以下方法签名:

Expression<Func<TOuter, TInner>> Combine (Expression<Func<TOuter, TMiddle>>> first, Expression<Func<TMiddle, TInner>> second);
Run Code Online (Sandbox Code Playgroud)

我如何实现所述方法,以便我可以像这样调用它:

Expression<Func<GrandParent, Parent>>> myFirst = gp => gp.Parent;
Expression<Func<Parent, string>> mySecond = p => p.Child.Name;

Expression<Func<GrandParent, string>> output = Combine(myFirst, mySecond);
Run Code Online (Sandbox Code Playgroud)

这样输出结果如下:

gp => gp.Parent.Child.Name
Run Code Online (Sandbox Code Playgroud)

这可能吗?

每个Func的内容只会是一个MemberAccess.我宁愿不最终output成为嵌套函数调用.

谢谢

c# lambda

24
推荐指数
4
解决办法
1万
查看次数

C#Dynamic Linq:在Where子句中实现“赞”

因此,我想对我的数据进行常规分类。我有这段代码从数据库中获取数据,该数据库将仅提取包含的数据value

using System.Linq.Dynamic;

public static IQueryable<object> SortList(string searchString, Type modelType, 
    IQueryable<object> model)
{
    ....

    string toStringPredicate = type == typeof(string) ? propertyName + 
        ".Contains(@0)" : propertyName + ".ToString().Contains(@0)";
    model = model.Where(propertyName + " != NULL AND " + toStringPredicate, value);
}
Run Code Online (Sandbox Code Playgroud)

该模型是这样的:

public class ManageSubscriberItems
{
    public int? UserId { get; set; }
    public string Email { get; set; }
    public Guid SubscriberId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我打电话时:

models = (IQueryable<ManageSubscriberItems>)EcommerceCMS.Helpers.FilterHelper
    .SortList(searchString, typeof(ManageSubscriberItems), models);

if(models.Any())
Run Code Online (Sandbox Code Playgroud)

它引发此错误:

“ …

c# linq sql-server dynamic dynamic-linq

10
推荐指数
1
解决办法
1036
查看次数

我可以重用代码来使用 EF Core 为子属性选择自定义 DTO 对象吗?

使用 Entity Framework Core 进行查询时,我使用表达式转换为 DTO 对象,这对于对象和任何子集合都很有效。

一个简化的例子:

模型:

public class Model
{
    public int ModelId { get; set; }
    public string ModelName { get; set; }

    public virtual ICollection<ChildModel> ChildModels { get; set; }

    // Other properties, collections, etc.

    public static Expression<Func<Model, ModelDto>> AsDto =>
        model => new ModelDto
        { 
            ModelId = model.ModelId,
            ModelName = model.ModelName,
            ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList()
        };
}
Run Code Online (Sandbox Code Playgroud)

询问:

dbContext.Models.Where(m => SomeCriteria).Select(Model.AsDto).ToList();
Run Code Online (Sandbox Code Playgroud)

我的问题是试图找到一种方法为非集合的孩子做类似的事情。如果我已添加到我的模型中:

public AnotherChildModel AnotherChildModel { get; set; }
Run Code Online (Sandbox Code Playgroud)

我可以在表达式中添加转换:

public static Expression<Func<Model, ModelDto>> AsDto …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework expression-trees entity-framework-core

4
推荐指数
1
解决办法
1978
查看次数