小编Eke*_*ein的帖子

ASP.NET MVC可以在视图中将接口作为模型吗?

假设我有以下界面:

public interface IUserListVM
{
     IList<string> UserList { get; }
}
Run Code Online (Sandbox Code Playgroud)

以及实现此视图模型接口的视图模型:

public class UserListVM : IUserListVM
{
    private IList<string> userList = new List<string>();

    IList<string> UserList
    {
        get { return userList; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可能有一个视图,期望一个继承IUserListVM的模型.假设我有一个UserList局部视图,看起来像这样:

 @model MVCWebsite.Views.IUserListVM

 @foreach (string user in Model.UserList) {
     user
 }
Run Code Online (Sandbox Code Playgroud)

这意味着将部分视图作为独立视图.

asp.net-mvc razor

8
推荐指数
1
解决办法
7669
查看次数

C# 生成编译时返回类型未知的 lambda 表达式

假设我有以下方法:

public static String GetString(int a) {
    return "";
}

public static int GetInt(int a) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我想为这些方法之一创建 lambda 表达式,我只在编译时知道以下内容:

方法信息 方法信息;上述方法之一的方法信息。

属性类型 属性类型;上述方法之一的返回类型的属性类型。

我在这里不能使用泛型类型,因为我不知道我希望在编译时调用哪个方法。

设想:

我有以下模型类:

public class Model {
    public String Name {
        get;set;
    }

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

在运行时我希望向该模型注入信息。

public static void Inject<T>(T model) {
    foreach(PropertyInfo propertyInfo in typeof(T).GetProperties()) {
        Func<int, object> funcGet = GetValueFunc(propertyInfo.PropertyType);
        propertyInfo.SetValue(model, funcGet.Invoke(0));
    }
}

public static Func<int, object> GetValueFunc(Type propertyType) {
    MethodInfo methodInfo = // say I …
Run Code Online (Sandbox Code Playgroud)

c# lambda return compile-time

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

从Expression函数获取父属性

所以我要说我有以下几个类:

public class Model {
    public AnotherModel InnerModel {
        get;
        set;
    }
}

public class AnotherModel {
    public String Value{
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有以下功能:

public static void Foo<T, U>(Expression<Func<T, U>> func) {
     // Get the property info from func
}
Run Code Online (Sandbox Code Playgroud)

我现在想做的是以下内容:

Foo<Model, String>(o => o.InnerModel.Value)
Run Code Online (Sandbox Code Playgroud)

问题出现了:

我知道您可以通过执行以下操作从表达式func中获取PropertyInfo:

PropertyInfo propertyInfo = (PropertyInfo)((MemberExpression)func.Body).Member;
Run Code Online (Sandbox Code Playgroud)

这将获得Value属性的PropertyInfo.但是,我还想获取有关parent属性的信息,即InnerModel属性.

到目前为止我所知道的是我可以做到以下几点:

((MemberExpression)func.Body).Expression
Run Code Online (Sandbox Code Playgroud)

获取父属性的信息.但是,似乎无法从Expression本身提取PropertyInfo.

有没有办法实际检索Expression的PropertyInfo?

编辑:澄清一下,这可能是尝试它的一种不好的方式但是这里:我不能使用EntityFramework,只是为了确保理解它.

我需要通过API与数据库进行通信.

这个数据库得到了通常的关系,如方式:表线程UserID - > Users.UserID

现在提取到模型.要遵循上面的例子:

class Thread {
    [Reference(USER_USERID)]
    [TableKey(THREAD_USERID)]
    public User user {
        get;set;
    }
}

class User {
     [TableKey(USER_USERID)] …
Run Code Online (Sandbox Code Playgroud)

c# lambda expression properties parent

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

Elasticsearch 数组属性必须包含给定的数组项

我有如下文件:

{
    "tags" => [
        "tag1",
        "tag2",
    ],
    "name" => "Example 1"
}

{
    "tags" => [
        "tag1",
        "tag3",
        "tag4"
    ],
    "name" => "Example 2"
}
Run Code Online (Sandbox Code Playgroud)

我现在想要的是进行术语搜索,其中给定的数组可能如下所示:

[tag1, tag3]
Run Code Online (Sandbox Code Playgroud)

预期命中应该是:

{
    "tags" => [
        "tag1",
        "tag3",
        "tag4"
    ],
    "name" => "Example 2"
}
Run Code Online (Sandbox Code Playgroud)

但是,当我执行以下查询时:

GET _search
{
    "query": {
        "filtered": {
           "query": {
               "match_all": {}
           },
           "filter": {
               "bool": {
                   "must": [
                      {
                          "terms": {
                             "tags": [
                                "tag1",
                                "tag3"
                             ]
                          }
                      }
                   ]
               }
           }
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

因为示例 1 …

arrays term elasticsearch

5
推荐指数
2
解决办法
3510
查看次数

是否有任何方法可以分解Expression <Func <T,Bool >>并获得相等比较的右侧?

这可能是一个远景,但无论如何我都会尝试.

让我们说我有这样的表达方式:

public class Foo {
    public int Id { get; set; }
}

Expression<Func<Foo, bool>> expr = p => p.Id == 2;
Run Code Online (Sandbox Code Playgroud)

有没有办法打破表达,让我们说:

  • 获取成员名称(expr.Body作为MemberExpression).Member.Name;

  • 并获得相等比较的右侧值.也就是说,2.

或者这不可能吗?

c# linq lambda expression equality

2
推荐指数
1
解决办法
506
查看次数

CustomAttribute 中的 C# CodeDOM 枚举值

我正在尝试创建一个具有自定义属性的类,如下所示:

public class Head : Attribute 
{
    public Head(Permissions permission, int id)
    {
        Permission = permission;
        Id = id;
    }

    public int Id { get; private set; }
    public Permissions Permission { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

其中 Permissions 是一个枚举:

public enum Permissions { R, W, D, RW, RWD }
Run Code Online (Sandbox Code Playgroud)

所以当我生成属性时:

var head = new CodeAttributeDeclaration
{
    Name = "Head",
    Arguments = 
    {
        new CodeAttributeArgument
        {
            Value = new CodePrimitiveExpression(Permissions.RWD)
        },
        new CodeAttributeArgument
        {
            Value = new CodePrimitiveExpression(idValue);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# enums codedom

2
推荐指数
1
解决办法
980
查看次数