我正在玩LINQ来了解它,但是当我没有一个简单的列表时,我无法弄清楚如何使用Distinct(一个简单的整数列表很容易做到,这不是问题).我想在对象的一个或多个属性上使用对象列表中的区别?
示例:如果对象是Person,则使用Property Id.如何获取所有Person并使用对象Distinct的属性Id?
Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"
我怎样才能得到Person1和Person3?那可能吗?
如果LINQ不可能,那么Person在.NET 3.5 中依赖于某些属性的列表最好的方法是什么?
几个Linq.Enumerable函数需要一个IEqualityComparer<T>.是否有一个方便的包装类适应delegate(T,T)=>bool实现IEqualityComparer<T>?编写一个很容易(如果你忽略了定义正确的哈希码的问题),但我想知道是否有开箱即用的解决方案.
具体来说,我想对Dictionarys 进行集合操作,仅使用Keys来定义成员资格(同时根据不同的规则保留值).
我试图在Linq中使用.distinct来获取基于表的一个字段的结果(因此不需要表中的整个重复记录).
我知道使用distinct来编写基本查询,如下所示:
var query = (from r in table1
orderby r.Text
select r).distinct();
但我需要r.text不重复的结果.
在我的应用程序中,我有讲师,他们有可以教授的课程列表,当我删除课程时,我想删除与讲师的联系.这是代码:
public void RemoveCourse(int courseId)
{
    using (var db = new AcademicTimetableDbContext())
    {
        var courseFromDb = db.Courses.Find(courseId);
        var toRemove = db.Lecturers
                        .Where(l => l.Courses.Contains(courseFromDb)).ToList();
        foreach (var lecturer in toRemove)
        {
            lecturer.Courses.Remove(courseFromDb);
        }
        db.SaveChanges();
    }
}
但它不起作用.我明白了
NotSupportedException:无法创建类型的常量值
Course.在此上下文中仅支持基元类型或枚举类型.
我究竟做错了什么?
因此,.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)
           ) );
我很确定上面的内容实际上并不奏效.我只是不想让整个班级做一些"沉重"的事情只是为了告诉程序如何比较苹果和苹果.
我有一个这样的课:
class MyClass<T> {
    public string value1 { get; set; }
    public T objT { get; set; }
}
以及这个班级的清单.我想使用.net 3.5 lambda或linq来获取不同value1的MyClass列表.我想这可能比在.net 2.0中缓存这样的列表的方式简单得多:
List<MyClass<T>> list; 
...
List<MyClass<T>> listDistinct = new List<MyClass<T>>();
foreach (MyClass<T> instance in list)
{
    // some code to check if listDistinct does contain obj with intance.Value1
    // then listDistinct.Add(instance);
}
lambda或LINQ的做法是什么?
我只是想从两个列表中删除重复项并将它们组合成一个列表.我还需要能够定义重复的内容.我通过ColumnIndex属性定义副本,如果它们相同,则它们是重复的.这是我采取的方法:
我找到了一个很好的例子,说明如何为代码段中只需要一次的随机场所编写内联比较器.
public class InlineComparer<T> : IEqualityComparer<T>
{
    private readonly Func<T, T, bool> getEquals;
    private readonly Func<T, int> getHashCode;
    public InlineComparer(Func<T, T, bool> equals, Func<T, int> hashCode)
    {
        getEquals = equals;
        getHashCode = hashCode;
    }
    public bool Equals(T x, T y)
    {
        return getEquals(x, y);
    }
    public int GetHashCode(T obj)
    {
        return getHashCode(obj);
    }
}
然后我只有两个列表,并尝试使用比较器对它们进行联合.
            var formatIssues = issues.Where(i => i.IsFormatError == true);
            var groupIssues = issues.Where(i => i.IsGroupError == true);
            var dupComparer = new InlineComparer<Issue>((i1, i2) => i1.ColumnInfo.ColumnIndex …我List的类型MyObject有以下定义:
class MyObject {
     public string ListName { get; set; }
     public IEnumerable<OtherObject> ObjectList { get; set;}
}
给定一个List类型MyObject,使用LINQ我应该使用什么表达式来获得所有不同的OtherObject?
我正打算做的是循环的每个MyObject并获得不同的OtherObject从ObjectList属性,但然后我需要在整个列表中的不同.
请注意,如果:
    MyObject[0].Objectlist[0] == 'ItemA'和MyObject[1].Objectlist[0] == 'ItemA'它仍然会返回的单个实例ItemA.此代码仅是一种表示形式.顺便说一句,这不是我访问我的对象的方式.
代码:
news = (from New myNew in new News()
       select myNew).Distinct().ToList();
但是这个区别是具有相同值的"对象".myNew每个月我都需要在我的名单中.(一个用于一月,一个用于februaru,依此类推).比,news将获得12记录.
有可能是某种Distinct(myNew.Month)?
我有对象的数组,DataTestplans从中我尝试检索特定的记录DataID,并ProductID使用所示的LINQ查询,我目前的查询有Distinct()哪些用于区分所有5点提到的属性,我该如何找回基于性能不重复的记录DataID,TestPlanName,TCIndexList和ProductID?
DataTestplans: -
[
    {
    "DataTestPlanID": 0,
    "DataID": 19148,
    "TestPlanName": "string",
    "TCIndexList": "string",
    "ProductID": 2033915
  },
    {
    "DataTestPlanID": 0,
    "DataID": 19148,
    "TestPlanName": "string",
    "TCIndexList": "string",
    "ProductID": 2033915
  },
      {
    "DataTestPlanID": 0,
    "DataID": 19149,
    "TestPlanName": "string",
    "TCIndexList": "string",
    "ProductID": -2642
  }
]
LINQ
            DataTestPlans_DataID_ProductID = DataTestPlans.Where(c => c.DataID == DataID_ProductID_Record.DataID && c.ProductID == DataID_ProductID_Record.ProductID).Distinct();