C# LINQ-选择具有特定日期的元素

C# LINQ-选择具有特定日期的元素,c#,.net,linq,C#,.net,Linq,我有一个类,它的一个属性是DateTime public class ClassWithDate { public int somevalue {get;set;} public DateTime somedate {get;set;} } 我有另一个字符串列表,它保存了一天的值(星期一、星期二等) 我知道语法是错误的,但我只是想提供一个例子。您可以这样做 var results = classWithDates.Where(wd=>!someDays.Contains(wd

我有一个类,它的一个属性是DateTime

public class ClassWithDate
{
   public int somevalue {get;set;}
   public DateTime somedate {get;set;}
}
我有另一个字符串列表,它保存了一天的值(星期一、星期二等)

我知道语法是错误的,但我只是想提供一个例子。

您可以这样做

var results = classWithDates.Where(wd=>!someDays.Contains(wd.somedate.DayOfWeek.ToString()));

工作

列出日期=新列表(){“星期一”、“星期二”、“星期五”}是已定义的周天数列表;和
classWithDates
成为您的收藏;然后,以下查询将帮助您完成此任务:

var selectedDates = classWithDates.Where(x => !days.Contains(x.somedate.DayOfWeek.ToString()));
这里举一个例子:

 DateTime d = DateTime.Now;
 List<ClassWithDate> classWithDates = new List<ClassWithDate>();
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(1), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(2), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(3), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(4), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(5), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(6), somevalue = 12 });
 List<string> days = new List<string>() { "Monday", "Tuesday", "Friday" };
 var selectedDates = classWithDates.Where(x => !days.Contains(x.somedate.DayOfWeek.ToString()));
DateTime d=DateTime.Now;
List classWithDates=新列表();
Add(新类WithDate(){somedate=d.AddDays(1),somevalue=12});
添加(新类WithDate(){somedate=d.AddDays(2),somevalue=12});
添加(新类WithDate(){somedate=d.AddDays(3),somevalue=12});
添加(新类WithDate(){somedate=d.AddDays(4),somevalue=12});
Add(新类WithDate(){somedate=d.AddDays(5),somevalue=12});
Add(新类WithDate(){somedate=d.AddDays(6),somevalue=12});
列表日=新列表(){“星期一”、“星期二”、“星期五”};
var selectedDates=classWithDates.Where(x=>!days.Contains(x.somedate.DayOfWeek.ToString());
试试这个

 List<ClassWithDate> _sampleList=new List<ClassWithDate>(); 
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1980, 5, 5)});
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1982, 10, 20)});
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1984, 1, 4)});
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1979, 6, 19)});



List<string> daysList = new List<string>() { "Monday", "Tuesday" };
IEnumerable<ClassWithDate> selectedDates = _sampleList.Where(x => !daysList.Contains(x.somedate.ToString("dddd")));

foreach(ClassWithDate cl in selectedDates)
{
  Console.WriteLine(cl.somedate.ToString("dddd"));      
}
List _sampleList=newlist();
_Add(newclasswithdate(){somevalue=10,somedate=newdatetime(1980,5,5)});
_Add(newclasswithdate(){somevalue=10,somedate=newdatetime(1982,10,20)});
_Add(newclasswithdate(){somevalue=10,somedate=newdatetime(1984,1,4)});
_Add(newclasswithdate(){somevalue=10,somedate=newdatetime(1979,6,19)});
List daysList=新列表(){“星期一”、“星期二”};
IEnumerable selectedDates=_sampleList.Where(x=>!daysList.Contains(x.somedate.ToString(“dddd”));
foreach(在选定日期中带有日期cl的类别)
{
控制台写入线(cl.somedate.ToString(“dddd”);
}
类似这样的内容:

classWithDates.someDate.DayOfWeek != someDays
  // Let be comparison case insensitive
  HashSet<String> hs = new HashSet(someDays, StringComparer.OrdinalIgnoreCase);

  // providing that classWithDates doesn´t contain null items
  var result = classWithDates
    .Where(item => !hs.Contains(item.somedate.DayOfWeek.ToString()));
//比较不区分大小写
HashSet hs=新的HashSet(有时是StringComparer.OrdinalIgnoreCase);
//假设classWithDates不包含空项
var result=classWithDates
.Where(item=>!hs.Contains(item.somedate.DayOfWeek.ToString());

我已经在这一行尝试了一些东西,但出现了以下错误:IEnumerable不包含“Contains”的定义。是否已将System.Linq添加到名称空间谢谢;诀窍是按照Hari PrasadI的建议将列表展平。我已经在这行上尝试了一些方法,但得到了以下错误:IEnumerable不包含“Contains”的定义,将“days”定义为“list()”,谢谢;诀窍是按照Hari PrasadI的建议展平列表。他已经在这一行上尝试了一些方法,但出现了以下错误:IEnumerable不包含“Contains”的定义。您是否有
列表的集合
?展平它们如果您有
IEnumerable
,请在查询
someDays=someDays之前添加这一行。选择many(s=>s);
这就成功了!我有几天在使用。Select用于其他操作,而不是SelectMany。我想它们的返回类型是不同的,这导致了错误。不用担心,我很高兴它对您有所帮助。
 DateTime d = DateTime.Now;
 List<ClassWithDate> classWithDates = new List<ClassWithDate>();
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(1), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(2), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(3), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(4), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(5), somevalue = 12 });
 classWithDates.Add(new ClassWithDate() { somedate = d.AddDays(6), somevalue = 12 });
 List<string> days = new List<string>() { "Monday", "Tuesday", "Friday" };
 var selectedDates = classWithDates.Where(x => !days.Contains(x.somedate.DayOfWeek.ToString()));
 List<ClassWithDate> _sampleList=new List<ClassWithDate>(); 
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1980, 5, 5)});
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1982, 10, 20)});
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1984, 1, 4)});
_sampleList.Add(new ClassWithDate(){somevalue=10,somedate=new DateTime(1979, 6, 19)});



List<string> daysList = new List<string>() { "Monday", "Tuesday" };
IEnumerable<ClassWithDate> selectedDates = _sampleList.Where(x => !daysList.Contains(x.somedate.ToString("dddd")));

foreach(ClassWithDate cl in selectedDates)
{
  Console.WriteLine(cl.somedate.ToString("dddd"));      
}
  // Let be comparison case insensitive
  HashSet<String> hs = new HashSet(someDays, StringComparer.OrdinalIgnoreCase);

  // providing that classWithDates doesn´t contain null items
  var result = classWithDates
    .Where(item => !hs.Contains(item.somedate.DayOfWeek.ToString()));