相关疑难解决方法(0)

LINQ对特定属性的Distinct()

我正在玩LINQ来了解它,但是当我没有一个简单的列表时,我无法弄清楚如何使用Distinct(一个简单的整数列表很容易做到,这不是问题).我想在对象的一个多个属性上使用对象列表中的区别

示例:如果对象是Person,则使用Property Id.如何获取所有Person并使用对象Distinct的属性Id

Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到Person1和Person3?那可能吗?

如果LINQ不可能,那么Person在.NET 3.5 中依赖于某些属性的列表最好的方法是什么?

c# linq distinct .net-3.5

1002
推荐指数
15
解决办法
80万
查看次数

我可以指定内联显式类型比较器吗?

因此,.NET 3.0/3.5为我们提供了许多查询,排序和操作数据的新方法,这要归功于LINQ提供的所有简洁功能.有时,我需要比较没有内置比较运算符的用户定义类型.在许多情况下,比较非常简单 - 比如foo1.key?= foo2.key.我可以使用匿名委托/ lambda函数简单地指定内联比较,而不是为该类型创建新的IEqualityComparer吗?就像是:

var f1 = ...,
    f2 = ...;
var f3 = f1.Except(
           f2, new IEqualityComparer(
             (Foo a, Foo b) => a.key.CompareTo(b.key)
           ) );
Run Code Online (Sandbox Code Playgroud)

我很确定上面的内容实际上并不奏效.我只是不想让整个班级做一些"沉重"的事情只是为了告诉程序如何比较苹果和苹果.

.net c# linq lambda

57
推荐指数
6
解决办法
4万
查看次数

Enumerable.Except 不使用我的自定义比较器

我尝试将 except 方法与自定义相等比较器一起使用,但它不起作用。

我的平等比较器:

public class BusinessObjectGuidEqualityComparer<T> : IEqualityComparer<T> where T : BusinessObject
{
    #region IEqualityComparer<T> Members

    /// <summary>
    /// Determines whether the specified objects are equal.
    /// </summary>
    /// <param name="x">The first object of type <paramref name="T"/> to compare.</param>
    /// <param name="y">The second object of type <paramref name="T"/> to compare.</param>
    /// <returns>
    /// <see langword="true"/> If the specified objects are equal; otherwise, <see langword="false"/>.
    /// </returns>
    public bool Equals(T x, T y)
    {
        return (x == null && y …
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods

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

使用 LINQ 的不同字典

我正在尝试使用 LINQ 获取不同值的字典。我试过用这个:

var roleRefList = 
    xDocument.Root.Descendants()
             .Where(x => x.Name.LocalName.Equals("roleRef") && 
                         !string.IsNullOrEmpty(Convert.ToString(x.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("roleURI")))) && 
                         !string.IsNullOrEmpty(Convert.ToString(x.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("href")))))
             .Select(l => new {
                  roleUri = l.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("roleURI")).Value,
                  href = l.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("href")).Value
              })
             .Distinct()
             .ToDictionary(a => a.roleUri);
Run Code Online (Sandbox Code Playgroud)

这里的问题是,当有重复的条目时,roleUri就会发生错误。我正在解析 XML 文档并制作 xElement 属性的字典,roleUri以及roleref它们是否存在于 xElement 中。

另一种解决方法是使用 for 循环:

Dictionary<string, string> roleRefList = new Dictionary<string, string>();
            foreach (XElement element in xDocument.Root.Descendants().Where(x => x.Name.LocalName.Equals("roleRef")))
            {
                string roelUri = Convert.ToString(element.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("roleURI")));
                string href = Convert.ToString(element.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("href"))); …
Run Code Online (Sandbox Code Playgroud)

c# xml linq linq-to-xml

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

标签 统计

c# ×4

linq ×4

.net ×1

.net-3.5 ×1

distinct ×1

extension-methods ×1

lambda ×1

linq-to-xml ×1

xml ×1