Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Linq动态项属性_C#_Linq_Dynamic - Fatal编程技术网

C#Linq动态项属性

C#Linq动态项属性,c#,linq,dynamic,C#,Linq,Dynamic,试图使一个可重用函数跳过所有相同的代码。问题是我匹配的地方的键有不同的名称。否则一切都一样 这就是我目前所拥有的。问题在于:item.ITEMGROUP,这取决于运行此函数的内容 public List<T> FilterGroupIds<T>(List<T> list, string key, string groupids) { if (!string.IsNullOrEmpty(groupids)) { string[]

试图使一个可重用函数跳过所有相同的代码。问题是我匹配的地方的键有不同的名称。否则一切都一样

这就是我目前所拥有的。问题在于:item.ITEMGROUP,这取决于运行此函数的内容

public List<T> FilterGroupIds<T>(List<T> list, string key, string groupids)
{
    if (!string.IsNullOrEmpty(groupids))
    {
        string[] groupidList = groupids.Split(new char[] { ',' });
        List<T> grouped = new List<T>();
        foreach (string groupidListItem in groupidList)
        {
            var mylist = list
              .Where(item => **item.ITEMGROUP**.Contains(groupidListItem))
              .ToList();

            grouped.AddRange(mylist);
        }
        list = grouped;
    }
    return list;
}

我只需通过一个委托传递此部分
item=>item[key].Contains(groupidListItem)

public List<T> FilterGroupIds<T>(List<T> list, string key, string groupids, 
                                 Func<T,bool> condition)
{
   ...
   var mylist = list.Where(condition).ToList();
}

foreach (string groupidListItem in groupidList)
{
    var mylist = list
       .Where(item => **item.ITEMGROUP**.Contains(groupidListItem))
       .ToList();

    grouped.AddRange(mylist);
}
list = grouped;
return list;

您不能对键名称完全相同的通用接口的
t
进行约束吗?我不太了解如何使用函数filterGroupId(列表、字符串键、字符串GroupId、Func条件)。如何编写委托函数。你能给我举个例子吗?@roady
Func myFilter=item=>item.Group.Contains(groupIdListItem)将是有效的。在函数的
位置
中放入的任何内容,都可以将其放入
Func
并传递给函数。如果你能在你的问题中包括你的一个类,我可以给出一个更好的例子。没有从家连接到数据库,但没有编译错误
string[]groupidList=groupids.Split(新字符[]{',});list=list.Where(item=>groupidList.Any(g=>item.ITEMGROUPID.Contains(g)).ToList()
return list.Where(item => groupIdList.Any(g => item.ITEMGROUP.Contains(g))
           .ToList();
foreach (string groupidListItem in groupidList)
{
    var mylist = list
       .Where(item => **item.ITEMGROUP**.Contains(groupidListItem))
       .ToList();

    grouped.AddRange(mylist);
}
list = grouped;
return list;