我有班级班级
public class LinqTest
{
public int id { get; set; }
public string value { get; set; }
}
List<LinqTest> myList = new List<LinqTest>();
myList.Add(new LinqTest() { id = 1, value = "a" });
myList.Add(new LinqTest() { id = 1, value = "b" });
myList.Add(new LinqTest() { id = 2, value = "c" });
Run Code Online (Sandbox Code Playgroud)
我只需从该列表中选择不同的id.即,我的结果列表应该只包含
[{id=1,value="a"},{ id = 2, value = "c" }]
Run Code Online (Sandbox Code Playgroud)
我怎么能用linq做到这一点?
编辑
输入,
id value
1 a
1 b
2 c
3 d
3 e
Run Code Online (Sandbox Code Playgroud)
出来应该是, …
我有我想从一个获得C#应用程序List的项目对象,其中包含不同对象另一个列表.
我试过这个
List<Project> model = notre_admin.Get_List_Project_By_Expert(u.Id_user);
if (model != null) model = model.Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
列表模型仍包含4个相同的对象Project.
这是什么原因?我该如何解决?
在我的c#MVC4应用程序中,我有一个字符串列表.列表中的每个奇数元素都是日期时间.每个元素之前的偶数元素是唯一标识符.
例如:[0]是A7M0066 [1]是2007-01-06 06:24:00.000
我想处理列表,并将奇数元素中基于日期时间的前5个最新对添加到另一个字符串列表中.我不知道从哪里开始,但我认为它将需要LINQ.
使用Keith在下面的答案和测试我意识到我实际需要的东西已经改变了.使用他的方法,我得到5个最近的结果,但其中3个具有相同的id.我需要最终结果都有一个唯一的ID.基本上我需要保留3个相同的条目中的1个并继续处理,直到所有5个条目都是唯一的.
public List<MAS_EMPLOYEE_TRANSFER> GetEmployeeTransferListForHR(TimecardDataContext TimecardDC)
{
List<MAS_EMPLOYEE_TRANSFER> objEmployeeTransferList = null;
try
{
objEmployeeTransferList = new List<MAS_EMPLOYEE_TRANSFER>();
objEmployeeTransferList = TimecardDC.MAS_EMPLOYEE_TRANSFER.Where(
employee =>
employee.HR_ADMIN_IND=="Y").ToList();
}
finally
{
}
return objEmployeeTransferList;
}
Run Code Online (Sandbox Code Playgroud)
它显示hr admin indicator = yes的所有值列表.但我必须hr admin=yes从表中得到并明确(empid)MAS_EMPLOYEE_TRANSFER.如何获得不同empId从的objEmployeeTransferList.
我有一个名为 Product
public class Product
{
public string Name{ get; set; }
public int ProductId{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个产品列表,相同Name但不同ProductId.
我想从列表中获得不同的产品 product.Name
即如果列表是
var fullproductList = {
Name: product,
ProductId: 1
}, {
Name: product,
ProductId: 2
}, {
Name: product,
ProductId: 3
};
Run Code Online (Sandbox Code Playgroud)
我想要任何一个上面的产品.
我想实现这一点而不像这样循环:
List<Product> distinctProducts= new List<Product>();
var distictproductName=fullSubjectList.Select(x => x.Name).Distinct().ToList();
foreach (var item in distictproductName)
{
distinctProducts.Add(fullproductList.Where(x=>x.Name==item).FirstOrDefault());
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
如何从对象列表中选择不同的值?我想只获取特定字段的列表,而不是整个对象的列表.
例如,要查询的集合:
name year
Item1 2009
Item2 2009
Item3 2010
Item4 2010
Item5 2011
Item6 2011
Run Code Online (Sandbox Code Playgroud)
从那以后我想回到不同年份来获得以下结果集合
2009
2010
2011
2012
Run Code Online (Sandbox Code Playgroud)
我试过了
distinctyears = myCollection.GroupBy(x => x.year).Select(x => x.First()).ToList();
Run Code Online (Sandbox Code Playgroud)
但这将返回整个对象的集合,而不是仅返回年份值.
简而言之,我需要在编译时不知道转换IEnumerable list(带有值IEnumerable<T>).我认为可以做到的唯一方法如下,但我发现它非常难看.HashSet<T> setT
public IEnumerable GetHashSet(IEnumerable source)
{
Type itemType = source.GetType().GetGenericArguments()[0];
Type listOpen = typeof(List<>);
Type listClosed = listOpen.MakeGenericType(new Type[] { itemType });
IList list = Activator.CreateInstance(listClosed) as IList;
foreach (var obj in source)
list.Add(obj);
Type hashSetOpen = typeof(HashSet<>);
Type hashSetClosed = hashSetOpen.MakeGenericType(new Type[] { itemType });
return Activator.CreateInstance(hashSetClosed, list) as IEnumerable;
}
Run Code Online (Sandbox Code Playgroud)
问题是,HashSet<T>没有任何方法可以通过某些非通用接口添加对象(相比之下,List<T>有IList.Add(object)).它也没有一个带有"裸"IEnumerable的构造函数(也没有List<T>).
c# ×7
linq ×4
list ×3
.net ×2
asp.net ×2
asp.net-mvc ×1
class ×1
distinct ×1
reflection ×1
string ×1