相关疑难解决方法(0)

如何撰写Linq表达式?即Func <Exp <Func <X,Y >>,Exp <Func <Y,Z >>,Exp <Func <X,Z >>>

我正在创建一个Validator<T>班级.我正在尝试SelectMany为我的验证器实现Linq 扩展方法,以便能够使用Linq查询组合表达式,并在基础值发生更改时验证最终结果.

以下测试代码演示了我的意图.

var a = 2;
var b = 3;

var va = Validator.Create(() => a, n => n >= 0 && n < 5);
var vb = Validator.Create(() => b, n => n >= 0 && n < 5);

var vc = from ia in va
         from ib in vb
         select ia + ib;

Debug.Assert(vc.Value == a + b); //2 + 3
Debug.Assert(vc.Value == 5);

Debug.Assert(vc.IsValid == true);

a = 7;

Debug.Assert(vc.Value == a …
Run Code Online (Sandbox Code Playgroud)

.net c# linq linq-expressions

14
推荐指数
2
解决办法
4216
查看次数

在对象内的对象上的实体框架LINQ表达式

编辑此问题,以期使其更清楚。

我们有实体框架代码优先设置。为了示例目的,我简化了两个类,实际上,与“记录”类似,大约有十多个类,其中“项”是导航属性/外键。

物品类别:

public class Item
{
    public int Id { get; set; }
    public int AccountId { get; set; }
    public List<UserItemMapping> UserItemMappings { get; set; }
    public List<GroupItemMapping> GroupItemMappings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

记录类:

public class Record 
{
    public int ItemId { get; set; }
    public Item Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

this.User是每个存储库中注入的用户对象,包含在存储库库中。我们有一个包含以下代码的Item存储库:

var items = this.GetAll()
    .Where(i => i.AccountId == this.User.AccountId);
Run Code Online (Sandbox Code Playgroud)

我在存储库的基础上创建了follow表达式,以轻松地对其进行过滤(以希望再次使用)。由于LINQ to实体的工作方式,我们无法使用静态扩展方法(System.NotSupportedException“ LINQ to Entities无法识别方法X,并且该方法无法转换为存储表达式。”)。

protected Expression<Func<Item, bool>> ItemIsOnAccount()
{
    return item => item.AccountId …
Run Code Online (Sandbox Code Playgroud)

c# linq expression entity-framework repository

10
推荐指数
2
解决办法
302
查看次数