Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与Linq查询不同的值_C#_Wpf - Fatal编程技术网

C# 与Linq查询不同的值

C# 与Linq查询不同的值,c#,wpf,C#,Wpf,我有下面的类和linq查询,用于填充网格 标题对于返回的每一行都是相同的。我要做的是用查询中的distinctTitle填充mString,以便将其绑定到单独的文本块 我可能不需要显示所有的代码,但它可能会有所帮助。如何显示不同的标题 public class Items { public int Id { get; set; } public string Details { get; set; } public string Title { get; set; }

我有下面的
linq
查询,用于填充
网格

标题
对于返回的每一行都是相同的。我要做的是用查询中的
distinct
Title
填充
mString
,以便将其绑定到单独的文本块

我可能不需要显示所有的代码,但它可能会有所帮助。如何显示
不同的标题

public class Items
{
    public int Id { get; set; }
    public string Details { get; set; }
    public string Title { get; set; }
    public int NewNumber { get; set; }
}

private ObservableCollection<Items>  mItem = new ObservableCollection<Items>();
private string mString = string.Empty;

public string SpecTitle
{
    get { return mString; }
}

public ObservableCollection<Items> GetItems
{
    get { return mItem; }
}
公共类项目
{
公共int Id{get;set;}
公共字符串详细信息{get;set;}
公共字符串标题{get;set;}
public int NewNumber{get;set;}
}
私有ObservableCollection mItem=新ObservableCollection();
私有字符串mString=string.Empty;
公共字符串
{
获取{return mString;}
}
公共可观察收集项目
{
获取{return mItem;}
}
这是linq查询

var results = (from z in mContext.View
               orderby z.ItemNumber ascending
               where z.ItemId == mId
               select new Items()
               {                                         
                   Id = z.ItemId,
                   Details = z.Details,
                   Title = z.ItemTitle,
                   NewNumber = z.ItemNumber
               });

List<Items> mNewItems = results.ToList();
mItem.Clear();
mNewItems.ForEach(y => mItem.Add(y));
var results=(从mContext.View中的z开始)
orderby z.ItemNumber升序
其中z.ItemId==mId
选择新项目()
{                                         
Id=z.ItemId,
细节=z.细节,
Title=z.ItemTitle,
NewNumber=z.ItemNumber
});
List mNewItems=results.ToList();
斜接透明();
mNewItems.ForEach(y=>mItem.Add(y));

还有一个名为
moreLinq的附加库
https://code.google.com/p/morelinq/
它有一个扩展区,您可以根据给定的键对其进行区分

就这么简单

   var results = (from z in mContext.View
                                 orderby z.ItemNumber ascending
                                 where z.ItemId == mId
                                 select new Items()
                                 {                                         
                                     Id = z.ItemId,
                                     Details = z.Details,
                                     Title = z.ItemTitle,
                                     NewNumber = z.ItemNumber

                                 }).DistinctBy(c=>c.Title).ToList();

将我的评论转换为答案:


只需执行
Items.Select(x=>x.Title).Distinct()

您可以实现自定义比较器,用于:

public class ItemsComparer : IEqualityComparer<Items>
{
    public bool Equals(Items x, Items y)
    {
        return x.Title == y.Title;
    }

    public int GetHashCode(Items obj)
    {
        return obj.Title.GetHashCode();
    }
}

Items.Select(x=>x.Title).Distinct()?…@HighCore你应该把它作为一个答案。嗯,我不明白你为什么需要一个额外的库。这与使用First()的GroupBy相同,因为根据他的问题var结果,他有几个字段,不仅仅是title使用just distinct不会仅通过title进行区分,而是distictBy。我不确定是否将GroupBy与First()一起使用,我只是认为使用DistinctBy会更快
public class ItemsComparer : IEqualityComparer<Items>
{
    public bool Equals(Items x, Items y)
    {
        return x.Title == y.Title;
    }

    public int GetHashCode(Items obj)
    {
        return obj.Title.GetHashCode();
    }
}
var titleList = mNewItems.Distinct(new ItemsComparer()).Select(t=>t.Items);