相关疑难解决方法(0)

我可以使用Roslyn进行编译时代码重写吗?

比如我有

class Foo: INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;
    public int Bar {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我可以在编译时获取Foo类AST并重写Bar

    public string Bar
    {
        get { return this.bar; }

        set 
        {
            if (value != this.bar)
            {
                this.phoneNumberValue = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Bar"));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

.

c# metaprogramming compiler-as-a-service roslyn

16
推荐指数
1
解决办法
4042
查看次数

在实体框架查询的选择子句中使用函数

我想针对实体框架实现以下逻辑.

var items = from item in myContext
            select new {
                Value1 = TweakValue(item.Value1),
                Value2 = TweakValue(item.Value2)
            };

protected int TweakValue(int value)
{
    // Custom processing here
    return value;
}
Run Code Online (Sandbox Code Playgroud)

由于TweakValue()select条款中的调用,这将不起作用.我知道查询转换为SQL,问题是TweakValue()无法转换为SQL.我的问题是实现这一目标的最经济的方法是什么.我需要第二个循环来转换值吗?

我仍然试图熟悉LINQ表达式.

.net c# linq entity-framework

9
推荐指数
2
解决办法
9901
查看次数

如何在使用LINQ to Entities和帮助方法时保持DRY?

让我们说我有一种特殊的方式来决定某些字符串是否"匹配",如下所示:

public bool stringsMatch(string searchFor, string searchIn)
{
  if (string.IsNullOrEmpty(searchFor))
  {
    return true;
  }

  return searchIn != null &&
    (searchIn.Trim().ToLower().StartsWith(searchFor.Trim().ToLower()) ||
     searchIn.Contains(" " + searchFor));
}
Run Code Online (Sandbox Code Playgroud)

我想使用Linq To Entities和这个帮助器从数据库中提取匹配项.但是,当我尝试这个:

IQueryable<Blah> blahs = query.Where(b => stringsMatch(searchText, b.Name);
Run Code Online (Sandbox Code Playgroud)

我得到"LINQ to Entities无法识别方法......"

如果我重新编写代码:

IQueryable<Blah> blahs = query.Where(b =>
      string.IsNullOrEmpty(searchText) ||
      (b.Name != null &&
        (b.Name.Trim().ToLower().StartsWith(searchText.Trim().ToLower()) ||
         b.Name.Contains(" " + searchText)));
Run Code Online (Sandbox Code Playgroud)

这在逻辑上是等价的,那么事情就可以了.问题是代码不是可读的,我必须为我想要匹配的每个不同实体重新编写代码.

至于我从这个问题中可以看出,我现在想做的事情是不可能的,但我希望我错过了什么,是吗?

c# linq-to-entities entity-framework

8
推荐指数
2
解决办法
1004
查看次数