【问题标题】:Error when use Dynamic Linq & ICompare使用 Dynamic Linq 和 ICompare 时出错
【发布时间】:2016-05-07 10:55:40
【问题描述】:

我阅读了此topic 并应用于我的代码。

//listSort contains ExpandoObjects
            List<dynamic> listSort = new List<dynamic>(listDynamic.Count);
            foreach (var item in listDynamic)
            {
                dynamic objDynamic = OrderBySpecialCharacter.ConvertToExpand(item);
                string sortValue = OrderBySpecialCharacter.GetValueInExpandoObject(objDynamic, colSortText);// "Name");
                objDynamic.Sort = OrderBySpecialCharacter.ConvertToACSII(sortValue.ToUpper());
                listSort.Add(objDynamic);
            }

            List<dynamic> sortedList = new List<dynamic>();
            if (colSort2 == null && colSort3 == null)
            {
                //Error in below line
                sortedList = listSort.OrderBy(x=> x.GetReflectedPropertyValue("Sort"),new MrFourCompare<string>()).ToList();
            }

    ----------------
     public static ExpandoObject ConvertToExpand<T>(T objInput)
            {
                ExpandoObject objExpand = new ExpandoObject();
                PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
                IDictionary<String, Object> iExpand = ((IDictionary<String, Object>)objExpand);
                foreach (PropertyDescriptor prop in properties)
                    iExpand.Add(prop.Name, prop.GetValue(objInput));
                return (ExpandoObject)iExpand;
            }
    --------------------

我看到了错误:

严重性代码描述项目文件行抑制状态 错误 CS0411 方法的类型参数 'Enumerable.OrderBy(IEnumerable, Func, IComparer)' 无法从用法中推断出来。尝试 指定类型参数 DemoDynamicObject C:\Users\MrFour-IT\Desktop\DemoDynamicObject\DemoDynamicObject\OrderBySpecialCharacter.cs 154 活动

我不知道如何解决它!请帮我!谢谢

【问题讨论】:

标签: c# linq expandoobject


【解决方案1】:

如果你有IComparer 喜欢这个代码:

public class MrFourCompare: IComparer<String>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y);
    }
}

根据您推荐的链接,您最常更改此行:

sortedList = listSort.OrderBy(x=> x.GetReflectedPropertyValue("Sort"),new MrFourCompare<string>()).ToList();

sortedList = listSort.OrderBy(x=> x.GetReflectedPropertyValue("Sort"),new MrFourCompare()).ToList();

因为在实现IComparer 时,您将其设置为字符串。

编辑:

IComparer 不能是Dynamic,因此如果您想按动态值的 Sort 属性进行排序,您最常将 sort 属性转换为精确类型,例如 StringInt

sortedList = listSort.OrderBy(x=> (string)x.GetReflectedPropertyValue("Sort"),new MrFourCompare()).ToList();

【讨论】:

  • 感谢您的帮助。我尝试过这个。但是错误“无法从用法中推断出来。尝试明确指定类型参数。”仍然出现。你能帮我解决这个错误吗?
  • 把你的IComparer 实现放在这里
  • 这是我的比较。公共类 MrFourCompare : IComparer { public int Compare(string x, string y) { return string.Compare(x, y); } } 这是为了测试。我稍后会修改它。我需要更改具有字符串类型的属性值才能排序具有相同的 SQL 服务器。例如:
  • 测试用。我稍后会修改它。我需要更改具有字符串类型的属性值才能排序具有相同的 SQL 服务器。例如:+ Sql server 中的结果:*1AaBbCc + C# 中的结果:*1ABCabc(它不是同一个 sql)
猜你喜欢
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 2011-06-18
相关资源
最近更新 更多