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);