Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Wher clause i a LINQ query

Posted on 2010-11-24
22
Medium Priority
?
652 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
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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

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

[Webinar] Cloud Security

In this webinar you will learn:

-Why existing firewall and DMZ architectures are not suited for securing cloud applications
-How to make your enterprise “Cloud Ready”, and fix your aging DMZ architecture
-How to transform your enterprise and become a Cloud Enabler

Question has a verified solution.

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

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
this video summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .

916 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