小编bre*_*ton的帖子

Linq对象集合的结果

我有一个问题,我可以解决,但我觉得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>.

有什么想法吗?

.net c# linq

4
推荐指数
1
解决办法
224
查看次数

通用字典比较

我有一个问题,我似乎无法绕过我的脑袋.我正在创建一个类来保存具有泛型类型的项的字典.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,但永远不会被解雇.有任何想法吗?

c# generics

3
推荐指数
1
解决办法
119
查看次数

标签 统计

c# ×2

.net ×1

generics ×1

linq ×1