【发布时间】:2012-03-22 15:34:10
【问题描述】:
设置
我有一个名为 WhereIn() 的方法,它接受一个参数 object[] 值:
public bool WhereIn(params object[] values)
问题
不幸的是,拨打WhereIn(values.Select(v => v.Id)) 真的很容易出错。
这会导致传入 Linq 表达式,而不是将值枚举到数组中。如何重载我的方法以接受 linq 表达式?
我的最佳猜测
我目前最好的猜测是做一个 IEnumerable 重载,然后必须检查它是否是一个字符串,然后将该字符串填充到一个对象数组中以调用另一个重载:
public bool WhereIn<T>(IEnumerable<T> values){
if(values.GetType().Name == "String"){
return WhereIn(new object[]{values});
} else {
// Do Stuff
}
}
我对必须手动检查字符串类型并不满意,而且我担心我可能会错过其他一些实现 IEnumerable 的类,它应该被包装在一个对象数组中。
【问题讨论】:
-
WhereIn的语义是什么? -
@Jon 它创建了一个 Microsoft CRM QueryExpression,用于在服务器端生成 SQL 语句。所以我这样使用它: crmdataContext.GetAllEntitiesWhereIn
("contactid", guid1, guid2, guid3);
标签: c# linq linq-to-entities