2010-08-18 13 views
5

दो तालिकाओं की कल्पना करें: शिफ्ट, RANK_S_DAY। शिफ्ट में एक ShiftDate कॉलम होता है जो दिनांक समय और RANK_S_DAY में एक DayOfWeek कॉलम होता है। मुझे (int) ShiftDate में शामिल होने की आवश्यकता है। DayOfWeek DayOfWeek के बराबर है। मैं समझता हूं कि यह क्यों काम नहीं करेगा, लेकिन मुझे पूरा यकीन नहीं है कि मैं इसे कैसे बदल सकता हूं। अपवाद है:LINQ से इकाइयां डेटटाइम पर शामिल हों। डेऑफविक

निर्दिष्ट प्रकार के सदस्य 'DayOfWeek' LINQ से इकाइयों में समर्थित नहीं है। केवल प्रारंभकर्ता, इकाई सदस्य, और इकाई नेविगेशन गुण समर्थित हैं।

जैसा कि मैं इसे समझता हूं, LINQ अनुवाद (int) ShiftDate का अनुवाद नहीं कर सकता। DayOfWeek कुछ एसक्यूएल समझता है, कोई विचार?

यहाँ कोड है:

Shifts = from s in en.Shifts 
join j in en.RANK_S_JOB on s.kronos_JobPositions.JobID equals j.JOBNO 
join d in en.RANK_S_DAY on (int)s.ShiftDate.DayOFWeek equals d.DAY_OF_WEEK 
orderby 
d.RANK, 
j.RANK ascending 
select s; 

उत्तर

1

ऐसा प्रतीत होता है वहाँ कुछ भी मैं इस स्तर पर क्या कर सकते हैं नहीं है। तो मैंने जो किया है, वह एक संग्रहित प्रो बनाई गई है जो दो तालिकाओं में शामिल हो जाती है और इसे इकाई में आयात करती है, एक फ़ंक्शन आयात बनाता है जो एक शिफ्ट इकाई लौटाता है। सुनिश्चित नहीं है कि यह सबसे अच्छा तरीका है, लेकिन यह काम करता है और साफ है।

+0

कृपया वास्तविक उत्तर को "उत्तर" के रूप में चिह्नित करें। – Monsignor

15

LINQ SQL करने के लिए

var dayOfWeekCondition = (dt => dt.DayOfWeek == dayOfWeek); 

संस्थाओं को LINQ

int dow = (int)dayOfWeek + 1; // SQL Day of week 
var dayOfWeekCondition = (dt => SqlFunctions.DatePart(“weekday”, dt) == dow); 

स्रोत:

http://blog.abodit.com/2009/07/entity-framework-in-net-4-0/

+0

भयानक, मैं यही देख रहा था! – Jacob

+0

@ जैकोब ने प्रासंगिक कोड को शामिल करने के लिए अभी जवाब दिया है ... :) –

0

दिलचस्प है, इस Linq करने वाली Sql में ठीक काम करता है:

from o in Orders 
join c in Categories on (int) o.OrderDate.Value.DayOfWeek equals c.CategoryID 
where o.OrderDate != null 
select c 

कि क्वेरी व्यर्थ है - यह सिर्फ कुछ यादृच्छिक उचित डेटाटाइप्स के साथ जुड़ जाता है। (मैं नॉर्थविंड का उपयोग कर रहा था)

1
using System.Data.Objects.SqlClient; //Don't forget this!! 

//You can access to SQL DatePart function using something like this: 

YourTable.Select(t => new { DayOfWeek = SqlFunctions.DatePart("weekday", t.dateTimeField) - 1 }); //Zero based in SQL 

//You can compare to SQL DatePart function using something like this: 

DateTime dateToCompare = DateTime.Today; 
YourTable.Where(t => SqlFunctions.DatePart("weekday", t.dateTimeField) - 1 == dateToCompare }); //Zero based in SQL