相关疑难解决方法(0)

实体框架:我在哪里扩展CSDL/MSL?

我正在使用Entity Framework 4.我使用数据库第一个模型,这意味着我从数据库生成了EDM.现在我想添加一些模型定义的函数.我的问题是......在哪里?

如果我把它们放在.edmx文件中,下次更新数据库并生成新的EDM时,我的所有添加内容都不会被破坏吗?我的意思是它说它就在.Designer.cs文件的顶部,"如果重新生成代码,将覆盖对该文件的手动更改."

那么,我在什么文件中添加了我的内容?

edmx entity-framework-4

18
推荐指数
1
解决办法
9161
查看次数

为子查询提供表达式

我有以下LINQ To Entities查询(简化形式):

ctx.BattlesUsers.Where(bu => bu.DateTime == ctx.BattlesUsers.
   Where(BattleUserSpecifications.BattleIdIsEqualTo(bu.BattleId)).
   Max(bu1 => bu1.DateTime));
Run Code Online (Sandbox Code Playgroud)

抛出异常"内部.NET Framework数据提供程序错误1025".

这里的问题是我的规范电话.此问题的常见解决方案是将规范表达式调用移出查询并将表达式直接传递给Where.但它不会在这里工作,因为我需要将bu.BattleId传递给表达式.

更新.

这是BattleIdIsEqualTo的代码:

public static Expression<Func<Model.Entities.BattleUser, bool>> UserIdIsEqualTo(long userId)
{
   return bu => bu.UserId == userId;
}
Run Code Online (Sandbox Code Playgroud)

.net linq-to-entities entity-framework

5
推荐指数
1
解决办法
342
查看次数

使用实体方法的结果进行lambda表达式或linq查询过滤

我想根据使用其属性的函数的结果来过滤我的entites.

即.我有这样的实体:

public class Lorem
{
    public int A {get;set;}
    public int B {get;set;}
    public int C {get;set;}

    public double DoMath(int externalValue)
    {
        // real implementation is longer and more complex

        if(A==B) {
          // some calculations
          return 0.2;
        }
        if(B==C) {
          // some calculations
          return 0.9;
        }
        else return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我正在查询实体,我想只获得DoMath> 0的那些实体.

// simplified scenario for example purpose
int someValue = 95;
// working with Entity Framework 4.1 Code First
var filtered = db.Lorems.Where(x=>x.DoMath(someValue) > 0);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:
LINQ …

c# lambda linq-to-entities entity-framework

3
推荐指数
1
解决办法
1797
查看次数

在动态linq查询中调用Regex.IsMatch()

我正在尝试调用Regex.IsMatch()并在动态linq查询中评估返回的结果.这是我试过的:

public static LambdaExpression Parse(SearchQuery query)
{
    string compilableExpression = "Regex.IsMatch(Category.ToLower(), \"\\bSomeCat\\b\", RegexOptions.Compiled) == true";

    ParameterExpression parameter1 = System.Linq.Expressions.Expression.Parameter(typeof(EventListItem));
    ParameterExpression parameter2 = System.Linq.Expressions.Expression.Parameter(typeof(Regex));

    return System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { parameter1, parameter2 }, null, compilableExpression);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下Category是一个属性EventListItem.调用时抛出此异常ParseLambda():

Unknown identifier 'Regex'.

有没有办法调用方法?我遇到了Expression.Call()方法,但我不确定这是否是我正在寻找的.任何帮助表示赞赏.

c# regex dynamic-linq

0
推荐指数
1
解决办法
2582
查看次数