6

Shifts、RANK_S_DAY という 2 つのテーブルがあるとします。Shifts には ShiftDate 列が含まれており、RANK_S_DAYDateTimeには列がありDayOfWeekます。参加する必要があり(int)ShiftDate.DayOfWeek equals DayOfWeekます。うまくいかない理由は理解できますが、どうすれば変更できるのかよくわかりません。例外は次のとおりです。

指定された型メンバー 'DayOfWeek' は、LINQ to Entities ではサポートされていません。初期化子、エンティティ メンバー、およびエンティティ ナビゲーション プロパティのみがサポートされています。

(int)ShiftDate.DayOfWeek私が理解しているように、LINQ はSQL が理解できるものに変換できません。

コードは次のとおりです。

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;
4

4 に答える 4

17

LINQ to 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/

于 2010-08-18T23:45:52.023 に答える
1

このレベルではどうしようもないようだ。そこで、2 つのテーブルを結合してエンティティにインポートするストアド プロシージャを作成し、Shifts エンティティを返す関数インポートを作成しました。それが最善のアプローチかどうかはわかりませんが、機能し、クリーンです。

于 2010-08-19T00:17:36.407 に答える
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
于 2012-09-13T08:43:36.837 に答える
0

興味深いことに、これは Linq-to-Sql で問題なく動作します。

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

そのクエリは無意味です。適切なデータ型を使用したランダムな結合です。(私はノースウィンドを使用していました)

于 2010-08-19T01:08:11.700 に答える