我有一个问题,我可以解决,但我觉得Linq中应该有一个我只是没有看到的解决方案.
所以我有两个类,一个详细记录类和这些类的集合:
public class ItemDetail
{
public string Name {get;set;}
public int? Id {get;set;}
}
public class ItemDetailCollection : List<ItemDetail>
{
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用我的存储库层填充这些对象而没有问题,并查询数据以获取我想要的记录子集.
var items = Repository.GetItemCollection();
var reportItemCollection = items.Where(x=>x.Id.HasValue);
Run Code Online (Sandbox Code Playgroud)
这一切都很好,花花公子.然而,这reportItemCollection是一个IEnumberable<ItemDetail>,我真正想要的是一个新的ItemDetailCollection.
当然,我可以创建一个新的集合并添加查询范围,但我觉得有一种方法可以自动将结果集填充为特定的集合类型.我尝试添加以下内容,只收到以下结果NULL:
var reportItemCollection = items.Where(x=>x.Id.HasValue) as ItemDetailCollection;
Run Code Online (Sandbox Code Playgroud)
尝试.Cast<ItemDetailCollection>()也不起作用.最后,我试过了
var reportItemCollection = items.Where(x=>x.Id.HasValue).Select(result => new ItemDetailCollection(){ result });
Run Code Online (Sandbox Code Playgroud)
但这只给了我一个IEnumerable<ItemDetailCollection>.
有什么想法吗?
我有一个问题,我似乎无法绕过我的脑袋.我正在创建一个类来保存具有泛型类型的项的字典.InvariantCultureIgnoreCase 如果索引类型是字符串,则需要强制使用此字典.
例如:
public class Cache<TIndex, TItem>
{
protected IDictionary<TIndex, TItem> _cache { get; set; }
public Cache()
{
this._cache = new Dictionary<TIndex, TItem>();
}
public bool Exists(TIndex index)
{
if (!_cache.ContainsKey(index))
{
//....do other stuff here
this._cache.Add(databaseResult.Key, databaseResult.Value);
return false;
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
所以第一个问题是处理具有不同大小写的字符串; 我通过强制数据为大写来解决这个问题.然而,现在,我发现有一些特定于文化的角色,所以如果没有不变的文化切换,ContainsKey将返回false.
我试过创建一个新的IEqualityComparer,但永远不会被解雇.有任何想法吗?