Solved

Wher clause i a LINQ query

Posted on 2010-11-24
22
643 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
22 Comments
 
LVL 22

Expert Comment

by:p_davis
Comment Utility
try

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

Expert Comment

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

Expert Comment

by:p_davis
Comment Utility
or it might be better to parse it and have them both be DateTime objects
0
 

Author Comment

by:racineconde
Comment Utility
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
Comment Utility
ok, so what is the value for

Modified.Value ?
0
 

Author Comment

by:racineconde
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
how is the value getting set for the variable today?
0
 

Author Comment

by:racineconde
Comment Utility
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
Comment Utility
string today = DateTime.Now.ToString("dd MMMM yyyy");
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 22

Expert Comment

by:p_davis
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
wow?? sorry

id = are
0
 
LVL 22

Expert Comment

by:p_davis
Comment Utility
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
Comment Utility
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
Comment Utility
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 500 total points
Comment Utility
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

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Suggested Solutions

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

762 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now