Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Wher clause i a LINQ query

Posted on 2010-11-24
22
Medium Priority
?
651 Views
Last Modified: 2013-12-17
Hi,
I have written the following query:
****************************************
var docs = (from doc in ctx.MyFiles
                            where (doc.Modified.Value.ToLongDateString().Equals(today))
                            select doc);
                foreach (var doc in docs)
                {
                    ModifiedFile modifedFile = new ModifiedFile();
                    modifedFile.FileName = doc.Name;
                    modifedFile.FileLocation = doc.Path;
                    modifedFile.DateLastModified = doc.Modified.Value;
                 }
****************************************
and I am getting the following error a the beginning of the foreach loop:
The expression ([10007].Modified.Value.ToLongDateString() == "24 November 2010") is not supported

What am I doing wrong??
0
Comment
Question by:racineconde
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
22 Comments
 
LVL 22

Expert Comment

by:p_davis
ID: 34205811
try

doc.Modified.Value.ToString("dd mmmm yyyy).Equals(today))
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34205817
seems to be that today is a different date/string format than doc.Modified.Value.ToLongDateString().
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34205822
or it might be better to parse it and have them both be DateTime objects
0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 

Author Comment

by:racineconde
ID: 34205879
I am getting the same kind of error. The message is:
The expression ([10007].Modified.Value.ToString("dd MMMM yyyy") == "24 November 2010") is not supported.

I tried both mmmm and MMMM for the month
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34205890
ok, so what is the value for

Modified.Value ?
0
 

Author Comment

by:racineconde
ID: 34205929
Well I don't know how to get this value since there is an execution error when the runtime tries to run the query (beginning of the foreach loop).  
Is there a way to find out?
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34205981
you can check all the values in the ctx.MyFiles. by putting a breakpoint and doing a quickwatch (if you are using visual studio)

also since it looks like this is a nullable date (assuming it is a date) you will want to check for null values (that could be the problem)

where (doc.Modified.HasValue && doc.Modified.Value.ToLongDateString().Equals(today))
0
 

Author Comment

by:racineconde
ID: 34206081
Yes those are data values and all the rows have values in that field.

I have changed the where clause to check the nullity of the value as you suggested but still get the same error.
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34206126
how is the value getting set for the variable today?
0
 

Author Comment

by:racineconde
ID: 34206139
I have changed the code to the following:
******************************************
var docs = (from doc in ctx.MyFiles
                         select doc);
                foreach (var doc in docs)
                {
                    if (doc.Modified.Value.ToString("dd MMMM yyyy").Equals(today))
                    {
                        ModifiedFile modifedFile = new ModifiedFile();
                        modifedFile.FileName = doc.Name;
                        modifedFile.FileLocation = doc.Path;
                        modifedFile.DateLastModified = doc.Modified.Value;
                     }
                 }
******************************************
to remove the where clause from the query and this new code works. I consider this as a work-around and I am still interested (for my knowledge) to find out what's wrong with the where clause in the LINQ query.
0
 

Author Comment

by:racineconde
ID: 34206145
string today = DateTime.Now.ToString("dd MMMM yyyy");
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34206159
what is ctx and MyFiles and how is today set.... i obviously am missing something and need the full picture of the setup.
0
 

Author Comment

by:racineconde
ID: 34206162
Initially I was doing the comparison directly and that's when I first got the error.
"where (doc.Modified.Value.AddDays(1).ToShortDateString() == DateTime.Now.ToShortDateString())"

That's when I decided to introduce the today variable thinking it might solve the problem.
0
 

Author Comment

by:racineconde
ID: 34206177
ctx is a datacontext variable referencing a sharepoint site and MyFiles is the name of the document library that contains the files I am trying to get hold of
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34206307
have you tried just using the datetime? strings can act funky (and not the good james brown kind) when comparing dates.

try

where (doc.Modified.Value.AddDays(1).Date == DateTime.Now.Date)//use the .Date if the time portion of the date doesn't matter. otherwise just leave it off.

0
 

Author Comment

by:racineconde
ID: 34206931
after the modifs u suggested this is the error I get:
*******************************************
A first chance exception of type 'System.Data.Services.Client.DataServiceQueryException' occurred in System.Data.Services.Client.dll
************************************************
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34207121
what id the regional settings for sharepoint site and your client? do they match?

are both set to format for en?
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34207123
wow?? sorry

id = are
0
 
LVL 22

Expert Comment

by:p_davis
ID: 34207314
what if you try

where (doc.Modified.Value.AddDays(1).Date.ToString(CultureInfo.InvariantCulture.DateTimeFormat) == DateTime.Now.Date.ToString(CultureInfo.InvariantCulture.DateTimeFormat))
0
 
LVL 10

Expert Comment

by:Mathiyazhagan
ID: 34210583
I have tried to get last modified file of today with following code.used LastWriteTime property to get modified datetime . may it hleps you.
string sampleDirectory = Environment.GetFolderPath  (Environment.SpecialFolder.MyDocuments);
DirectoryInfo[] dirs = new DirectoryInfo (sampleDirectory).GetDirectories();
var docs = (from doc in dirs[0].GetFiles ()
	where (doc.LastWriteTime.ToLongDateString().Equals(DateTime.Today.ToLongDateString()))
	elect doc);
foreach (var doc in docs)
{
	ModifiedFile modifedFile = new ModifiedFile();
	modifedFile.FileName = doc.Name;
	modifedFile.FileLocation = doc.Directory.FullName ;
	modifedFile.DateLastModified = doc.LastWriteTime;
	Console.WriteLine(modifedFile);
}
 --- ModifiedFile class --
class ModifiedFile
{
   public string  FileName {get;set;}
   public string  FileLocation {get;set;}
   public DateTime  DateLastModified {get;set;}
					 
   public override string ToString()
   {
    return String.Format ("Name :{0} Path:{1} Date Modified                                        {2}",FileName,FileLocation,DateLastModified.ToLongDateString());
   }
}

Open in new window

0
 

Author Comment

by:racineconde
ID: 34211878
p davis: the modification did not fix the problem

Mathiyazhagan: I am getting the files from SharePoint. the "LastWriteTime" property does not exist.
0
 
LVL 12

Accepted Solution

by:
kumar754 earned 2000 total points
ID: 35040482
var allModifiedFiles =
from doc in ctx.MyFiles.where (c => c.Modified.HasValue && c.Modified.Value.Date == DateTime.Today)
select new ModifiedFile()
{
  FileName = doc.Name,
  FileLocation = doc.Path,
  DateLastModified = doc.Modified.Value
};

this will return you a collection of ModifiedFile[] class and then you can play around with this collection or directly bind to a grid.
0

Featured Post

Learn by Doing. Anytime. Anywhere.

Do you like to learn by doing?
Our labs and exercises give you the chance to do just that: Learn by performing actions on real environments.

Hands-on, scenario-based labs give you experience on real environments provided by us so you don't have to worry about breaking anything.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question