C# 匿名订购
关于,我尝试了下面的一个答案C# 匿名订购,c#,.net,linq,compiler-errors,sql-order-by,C#,.net,Linq,Compiler Errors,Sql Order By,关于,我尝试了下面的一个答案 vehicleList.OrderBy(c=> { Car car = c as Car; if (car != null) return car.ModelName else return ""; } 但它给出了编译器错误: 方法的类型参数 'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, 无法从用法推断Sy
vehicleList.OrderBy(c=>
{
Car car = c as Car;
if (car != null)
return car.ModelName
else
return "";
}
但它给出了编译器错误:
方法的类型参数
'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,
无法从用法推断System.Func“”。尝试
显式指定类型参数
这有什么不对?如何纠正
我努力实现的目标如下:
- 如果对象类型为Car,则按模型名排序
- 否则,如果对象id为Train类型,则按TrainName
演员阵容
var sorted = uiItems.Cast<Contact>()
.OrderBy(c => contact.Presence; );
var sorted=uiItems.Cast()
.OrderBy(c=>contact.Presence;);
您是否尝试过引用问题中的建议,使用Linq演员阵容
var sorted = uiItems.Cast<Contact>()
.OrderBy(c => contact.Presence; );
var sorted=uiItems.Cast()
.OrderBy(c=>contact.Presence;);
您可以像这样安装比较器:
var sorted = uiItems.OrderBy(x => x.Contact, new YourComparer ());
public class YourComparer : IComparer<Contact>
{
public int Compare(Contact? x, Contact? y)
{
if (x == y)
return 0;
if (x == null)
return 1;
if (y == null)
return -1;
if (x.Presence == null)
return 1;
if (y.Presence == null)
return -1;
return return x.Presence < y.Presence ? -1 : 1;
}
}
var sorted=uiItems.OrderBy(x=>x.Contact,newyourcomarer());
公共类比较程序:IComparer
{
公共整数比较(联系人?x,联系人?y)
{
如果(x==y)
返回0;
如果(x==null)
返回1;
如果(y==null)
返回-1;
if(x.Presence==null)
返回1;
if(y.Presence==null)
返回-1;
返回x.存在
您可以像这样安装比较器:
var sorted = uiItems.OrderBy(x => x.Contact, new YourComparer ());
public class YourComparer : IComparer<Contact>
{
public int Compare(Contact? x, Contact? y)
{
if (x == y)
return 0;
if (x == null)
return 1;
if (y == null)
return -1;
if (x.Presence == null)
return 1;
if (y.Presence == null)
return -1;
return return x.Presence < y.Presence ? -1 : 1;
}
}
var sorted=uiItems.OrderBy(x=>x.Contact,newyourcomarer());
公共类比较程序:IComparer
{
公共整数比较(联系人?x,联系人?y)
{
如果(x==y)
返回0;
如果(x==null)
返回1;
如果(y==null)
返回-1;
if(x.Presence==null)
返回1;
if(y.Presence==null)
返回-1;
返回x.存在
这解决了错误:
var sortedVehicles = vehicleList.OrderBy<Vehicle, string>(c=>
{
...
});
var sortedVehicles=vehicleList.OrderBy(c=>
{
...
});
这解决了错误:
var sortedVehicles = vehicleList.OrderBy<Vehicle, string>(c=>
{
...
});
var sortedVehicles=vehicleList.OrderBy(c=>
{
...
});
看下面的例子:
class Item
{
public int X;
public string Y;
}
var items = new Item[100];
var ordered = items.OrderBy<Item, string>(i => i.Y);
类项目
{
公共int X;
公共字符串Y;
}
可变项目=新项目[100];
var ordered=items.OrderBy(i=>i.Y);
OrderBy
需要两种类型。前者是可枚举的,后者用于lambda表达式。此外,在某些情况下,必须铸造正在使用的集合元素。如果您确定所有类型都是特定类型或类型的,则可以在OrderBy
之前使用Cast
方法,以管理其他类型。查看以下示例:
class Item
{
public int X;
public string Y;
}
var items = new Item[100];
var ordered = items.OrderBy<Item, string>(i => i.Y);
类项目
{
公共int X;
公共字符串Y;
}
可变项目=新项目[100];
var ordered=items.OrderBy(i=>i.Y);
OrderBy
需要两种类型。前者是可枚举的,后者用于lambda表达式。此外,在某些情况下,必须铸造正在使用的集合元素。如果您确信所有类型都是特定类型或类型的
,那么您可以使用Cast
方法在OrderBy
之前进行转换,以便与其他类型进行比较。您的代码说的是联系人
,但您所说的是汽车
和火车
!什么是uiItems
?对不起,我把实际的程序代码。。。我使用车辆,因为它很容易理解…现在将更正。谢谢车辆列表的类型是什么?通常情况下,您不应该出现此错误。您的代码上显示的是联系人
,但您所说的是汽车
和火车
!什么是uiItems
?对不起,我把实际的程序代码。。。我使用车辆,因为它很容易理解…现在将更正。谢谢车辆列表的类型是什么?通常您不应该出现此错误。但当某些项目不是联系人时,会出现不同的行为。也许这里使用TypeOf更好。集合应具有非接触值。var sorted=uiItems.TypeOf().OrderBy(c=>contact.Presence;)@voo:of type
也没有完全相同的行为——它将不属于Contact
s的对象从已排序的枚举中排除。但据我理解的示例,func必须执行完全相同的操作-与Contact type进行比较并返回已筛选的有序Contact集合。如果是这样的话,这里的TypeOf更合适,当某些项目不是Contact
s时,它有不同的行为。也许这里使用TypeOf更好。集合应具有非接触值。var sorted=uiItems.TypeOf().OrderBy(c=>contact.Presence;)@voo:of type
也没有完全相同的行为——它将不属于Contact
s的对象从已排序的枚举中排除。但据我理解的示例,func必须执行完全相同的操作-与Contact type进行比较并返回已筛选的有序Contact集合。如果是的话,它的类型在这里更合适